Why is rails bootstrap so slow and what can I do about it?
Rails 3.0是一只认真的狗。我已经在Rails上开发了5年了,它的启动从未如此慢。特别是,测试要花很长时间才能引导到具有SSD的顶级MacBook上,因此迭代周期会受到严重影响。每次开始测试时,我都需要阅读一篇文章。这是疯狂的,而不是"敏捷"的。我不妨编译。
这是我最终有机会离开Rails的主要动力。
如果有人有解决方案,请提供。我知道很多人都在遭受这个问题的困扰。
我不使用rspec-我知道有一种解决方案可以帮助测试rspec。
我正在使用faster_require和rails-dev-boost,但是并没有明显的影响。
我正在使用ruby 1.9.2,并且需要。在具有4Gb RAM和SSD的双核2.13 Ghz MacBook Air上,一个非常简单的控制器测试需要26秒!为什么!?
查看spork。它实际上运行着一台小型服务器,该服务器运行引导程序,然后等待测试运行,从而使您可以自举一次,然后从该状态进行多次测试。如果对配置进行了某些类型的更改,您有时会不得不重新启动它,但是在大多数情况下,它可以让您真正快速地进行红绿重构的迭代。
引用Yehuda Katz的话:
There are things that the C require code does in 1.9 that slow things down. One such example is re-checking $LOAD_PATH to make sure it is all expanded on every require. This is something that should be addressed by ruby-core. Ia€?ll open a ticket on redmine if there isna€?t one already.
I am also experiencing this problem and a $LOAD_PATH issue seems like a potential cause. Lets hope it gets fixed soon.
在我看来,您只需要忍受这一切,并希望它将在Ruby 1.9.3中得到修复。
问题似乎是require的缓慢性,如果您像
那样进行一些最小化分析
1 2 | CPUPROFILE=/tmp/my_app_profile RUBYOPT="-r`gem which perftools | tail -1`" ruby -I lib:test test/unit/user_test.rb pprof.rb --text /tmp/my_app_profile |
您可能应该看到很多时间花在了require上(另一个选择是在加载夹具中看到了很多,但是我想您已经知道这不是问题所在)。
在我的盒子中(macbook pro 2011 13 "上的osx,带有核心i5和旋转的硬盘驱动器),时间更长,约为5秒,虽然还很多,但可以忍受得更多,所以也许值得研究差异。
您的系统中安装了多少个gem?
您是否尝试过在没有捆绑程序/ ruby??gems的情况下运行测试/引导?
是的,它有点慢。噢,等等,在我的Java时代,
1
与
更新/添加答案:
优化技巧:在application.rb中添加到添加到autoload_paths的路径上
为不必编写\\'require \\'语句而付出的代价是一种折衷。 Rails试图做正确的事情,因此会预加载所有内容。基本上,您有两种解决方案:
使用解决方案1)我说的全部。并且让我的套件运行不到半秒(仅进行70次测试,但是等待Rails加载的可能性很小)
这是一个已知的问题,尤其是在Ruby 1.9.2上。
好消息是,有一个修补程序可以极大地加快Ruby的启动速度(
正如@ user185374所说,您正在权衡
我偶然发现了一个有趣的资源,可以在不使用
作者是这样总结的:
I can't tell you what it means to run
all of my 150+ specs within 2 seconds.
I think it's a little bit of an extra
work, but it's well worth the effort!
我刚刚找到的另一个解决方案:
http://logicalfriday.com/2011/05/18/faster-rails-tests-with-hydra/
查看宙斯ruby。
这应该可以大大加快速度。
好消息。在升级到Ruby 1.9.3之后,Rails会在可容忍的时间内启动。