改善慢速Rails启动时间(rails console,rails server)

时间:2013-07-02 23:38:55

标签: ruby-on-rails ruby profiling

我使用多个Rails应用程序,一些使用Rails 3.2 / Ruby 2.0,另一些使用Rails 2.3 / Ruby 1.8.7。

他们的共同点是,随着他们的成长和添加更多的依赖/宝石,他们需要更长的时间才能开始。开发,测试,生产,控制台,没关系;有些需要60多秒。

首选的首选方法是什么,分析导致加载时间如此之慢的原因,以及两个,改善加载时间?

3 个答案:

答案 0 :(得分:18)

有一些事情可能导致这种情况。

  1. GC通过次数过多和VM常见缺陷 - 有关详细说明,请参阅this answer。 Ruby< 2.0有一些非常慢的位,可以大大提高加载速度;使用Falcon或railsexpress补丁编译Ruby可以大大帮助。所有版本的MRI Ruby默认使用不适合Rails应用程序的GC设置。
  2. 为了加载文件,必须迭代许多遗留宝石。如果您使用的是捆绑包,请尝试bundle clean。如果您正在使用RVM,则可以尝试创建一个新的gemset。
  3. 就分析而言,您可以使用ruby-prof来分析启动应用时发生的情况。您可以将config/environment.rb包装在ruby-prof块中,然后使用它来生成类似rails r ''之类的引导周期的配置文件报告。这可以帮助您追踪您在开机时花费大量时间的地方。您也可以分析各个部分,例如boot.rb中的捆绑工具设置,或#initialize!中的environment.rb来电。

    您可能不会考虑的是DNS超时。如果您的应用程序在启动时执行DNS查找(无法解析),这些可能会阻止$ timeout秒的进程(在某些情况下可能高达30!)。您也可以审核这些应用程序。

答案 1 :(得分:10)

Ryan对加速测试,控制台,佣金任务有很好的关注:http://railscasts.com/episodes/412-fast-rails-commands?view=asciicast

我检查了那里的每一种方法,发现“spring”是最好的。只需运行

等任务即可
$ spring rspec 

第一次弹簧跑的时间与以前相同,但第二次和以后会更快。

另外,根据我的经验,有时间你需要停止弹簧服务器并在出现奇怪错误时重新启动,但机会很少。

答案 2 :(得分:0)

对于ruby 2应用,请尝试使用zeus - https://github.com/burke/zeus

1.8应用似乎比1.9快得多,spork可能有帮助吗? http://railscasts.com/episodes/285-spork