慢铁栈

ast*_*nic 15 performance rake ruby-on-rails

我跑的时候

rails服务器

要么

耙-T

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

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

小智 16

这也困扰着我,因为我已经切换到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
Run Code Online (Sandbox Code Playgroud)

编辑:或者,对于铁路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
Run Code Online (Sandbox Code Playgroud)

......你可以跟进发生的事情.在我的系统上,这是一款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
Run Code Online (Sandbox Code Playgroud)

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

  • @lambinator你的意思是**Ruby**1.9.3-p327? (2认同)

stw*_*ert 14

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

然后我们在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
Run Code Online (Sandbox Code Playgroud)

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

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