我使用几个 Rails 应用程序,一些在 Rails 3.2/Ruby 2.0 上,还有一些在 Rails 2.3/Ruby 1.8.7 上。
它们的共同点是,随着它们的增长和添加更多的依赖项/宝石,它们需要越来越长的时间才能开始。开发、测试、生产、控制台,没关系;有些需要60多秒。
首先,分析导致加载时间如此缓慢的原因,第二,改善加载时间的首选方法是什么?
我使用几个 Rails 应用程序,一些在 Rails 3.2/Ruby 2.0 上,还有一些在 Rails 2.3/Ruby 1.8.7 上。
它们的共同点是,随着它们的增长和添加更多的依赖项/宝石,它们需要越来越长的时间才能开始。开发、测试、生产、控制台,没关系;有些需要60多秒。
首先,分析导致加载时间如此缓慢的原因,第二,改善加载时间的首选方法是什么?
有几件事会导致这种情况。
bundle clean
. 如果您使用的是 RVM,您可以尝试创建一个新的 gemset。就分析而言,您可以使用 ruby-prof 来分析启动应用程序时发生的情况。您可以包装config/environment.rb
在 ruby-prof 块中,然后使用它来生成引导周期的配置文件报告,例如rails r ''
. 这可以帮助您跟踪您在启动时花费的大部分时间。您也可以分析各个部分,例如 中的捆绑程序设置boot.rb
或 中的#initialize!
调用environment.rb
。
您可能没有考虑的是 DNS 超时。如果您的应用程序在启动时执行 DNS 查找,但它无法解析,这些可能会阻塞进程 $timeout 秒(在某些情况下可能高达 30 秒!)。您也可以针对这些审核应用程序。
Ryan 有一个关于加速测试、控制台、rake 任务的很好的教程: http ://railscasts.com/episodes/412-fast-rails-commands?view=asciicast
我检查了那里的每一种方法,发现“弹簧”是最好的。只需运行以下任务:
$ spring rspec
你第一次跑春天的时间和以前一样,但第二次和以后的时间会快得多。
另外,根据我的经验,当出现奇怪的错误时,您需要停止 spring server 并重新启动,但这种机会很少。
对于 ruby 2 应用程序,请尝试 zeus - https://github.com/burke/zeus
1.8 应用程序的启动速度似乎比 1.9 快得多,spork 可能有帮助吗?http://railscasts.com/episodes/285-spork