慢铁栈

当我跑

rails服务器

要么

耙-T

或者其他一些rails脚本,需要花费很多时间,大约1分钟。 确定这么慢的最佳方法是什么? 如何提高速度?

Rails v是3.0.3运行ruby 1.9.2(RVM) – Linux

这也困扰着我,因为我已经切换到Rails 3。

对于你的第二个问题:我通过挖掘框架发现初始化程序在实际开始执行任务之前需要大约一半时间进行简单的rake或rails调用。

如果你将这些简单的时序线放入$GEM_PATH/gems/railties-3.0.3/lib/rails/initializable.rb的初始化程序调用循环中(或者如果你愿意,可以将它放回去):

 def run_initializers(*args) return if instance_variable_defined?(:@ran) t0 = Time.now initializers.tsort.each do |initializer| t = Time.now initializer.run(*args) puts("%60s: %.3f sec" % [initializer.name, Time.now - t]) end puts "%60s: %.3f sec" % ["for all", Time.now - t0] @ran = true end 

编辑:或者,对于铁路4.2.1:

 def run_initializers(group=:default, *args) return if instance_variable_defined?(:@ran) t0 = Time.now initializers.tsort.each do |initializer| t = Time.now initializer.run(*args) if initializer.belongs_to?(group) puts("%60s: %.3f sec" % [initializer.name, Time.now - t]) end puts "%60s: %.3f sec" % ["for all", Time.now - t0] @ran = true end 

……你可以跟进发生的事情。 在我的系统上,这是一款2.4 Core 2 Duo MacBook,初始化程序大约需要7秒钟。

有一些在我的系统上特别慢。 当我在一秒钟以下过滤掉所有内容时,我会在我的系统上得到这个结果:

  load_active_support: 1.123 sec active_support.initialize_time_zone: 1.579 sec load_init_rb: 1.118 sec set_routes_reloader: 1.291 sec 

我相信有人(是我吗?)需要一些时间才能开始并优化。

我们的Rails 3.1启动时间差不多1分钟(有很多gem)

然后我们在reddit上找到了一些Ruby 1.9.3调优选项: http : //www.reddit.com/r/ruby/comments/wgtqj/how_i_spend_my_time_building_rails_apps/c5daer4

 export RUBY_HEAP_MIN_SLOTS=800000 export RUBY_HEAP_FREE_MIN=100000 export RUBY_HEAP_SLOTS_INCREMENT=300000 export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 export RUBY_GC_MALLOC_LIMIT=79000000 

把它放在你的shell环境/ profile / bashrc中,你就完成了。

我们将启动时间从1分钟提升到9秒

我使用的一个解决方法是使用rails-sh预加载rails环境。 这样只有第一个rails / rake命令很慢,其余的都很快。 在这个问题上写了一个更全面的答案。

我最近尝试并与第一个兼容的另一种方法是安装修补的ruby(使用rvm或rubyenv或来自源代码)并调整环境变量(请参阅@ stwienert的答案)。 猎鹰补丁和railsexpress补丁似乎在ruby1.9中获得了显着的表现。 查看rvm / ruby​​env如何用它们安装修补的ruby。

我在这里使用了robokopp的提示,发现大部分时间都在build_middleware_stackload_config_initializers步骤中使用。 这是因为我使用的omniauth gem增加了中间件,可能还有很多初始化步骤。 我在Rails 3.1.rc1上,我的初始化需要大约13秒(我在ruby 1.9.2p180上)。

即使对于全新的rails 3.1.rc1应用程序,初始化需要大约3.6秒,load_config_initializers需要最多时间。

所以我建议你寻找拥有大量初始化程序或添加太多中间件的gems /你自己的代码。