我使用几个Rails应用程序,一些在Rails 3.2 / Ruby 2.0上运行,一些在Rails 2.3 / Ruby 1.8.7上运行。
它们共同之处在于,随着它们增加更多依赖项/ gems,启动时间变得越来越长。无论是开发,测试,生产还是控制台,有些需要60秒以上。
首选的方法是什么?首先,对导致加载时间变慢的原因进行分析,然后改善加载时间?
我使用几个Rails应用程序,一些在Rails 3.2 / Ruby 2.0上运行,一些在Rails 2.3 / Ruby 1.8.7上运行。
它们共同之处在于,随着它们增加更多依赖项/ gems,启动时间变得越来越长。无论是开发,测试,生产还是控制台,有些需要60秒以上。
首选的方法是什么?首先,对导致加载时间变慢的原因进行分析,然后改善加载时间?
有几个因素可能导致这种情况出现。
bundle clean
。如果您正在使用RVM,则可以尝试创建一个新的gemset。就性能分析而言,您可以使用ruby-prof来分析启动应用程序时发生了什么。您可以在一个ruby-prof块中包装config/environment.rb
,然后使用类似rails r '
的内容来生成启动周期的剖面分析报告。这可以帮助您跟踪查找引导时间主要花费在哪里。您也可以对单独的部分进行分析,例如boot.rb
中的bundler设置,或environment.rb
中的#initialize!
调用。
您可能没有考虑到的是DNS超时。如果您的应用程序在启动时执行DNS查找,但无法解析这些查找,则这些查找可能会阻止进程$timeout秒(在某些情况下可能高达30秒!)。您可能还要审查应用程序中是否存在此类情况。
Ryan有一个很好的教程,关于如何加快测试、控制台、rake任务: http://railscasts.com/episodes/412-fast-rails-commands?view=asciicast
我已经尝试了其中的每一种方法,发现"spring"是最好的。只需像这样运行任务:
$ spring rspec
你第一次启动 Spring 的时间将与以前相同,但第二次及以后将更快。
根据我的经验,有时候当出现奇怪的错误时,你需要停止 Spring 服务器并重新启动,但这种情况很少发生。
Spring
虽然快速而强大,但绝对不喜欢rspec/capybara
。 - professormeowingtons