为什么rails bootstrap这么慢,我能做些什么呢?
Rails 3.0是一个严重的狗。 我在Rails上开发了5年,启动速度从未如此慢。 尤其是,testing永远引导在一stream的MacBook与SSD,所以迭代周期遭受严重。 每次我开始testing时,我都需要阅读一篇文章。 这是疯狂的,而不是“敏捷”。 我不妨编辑一下。
当我有机会的时候,这是我最终从Rails转移的主要动机。
如果有人有解决办法,请提供。 我知道很多人遭受这个问题。
我不使用rspec – 我知道有一个解决scheme来帮助rspec的testing。
我正在使用faster_require和rails-dev-boost,但没有太大的影响。
我在ruby1.9.2,需要。 一个非常简单的控制器testing需要26秒的双核2.13 Ghz的MacBook Air与4Gb RAM和SSD! 为什么!?
引用Yehuda Katz的话:
有一些C需要的代码在1.9中会减慢速度。 一个这样的例子是重新检查$ LOAD_PATH,以确保它是所有需要扩展。 这是ruby-core应该解决的问题。 如果还没有的话,我会在redmine上打开一张票。
我也遇到这个问题,$ LOAD_PATH问题似乎是一个潜在的原因。 让我们希望它很快得到解决。
所以这听起来像你只需要忍受这个,希望它会在Ruby 1.9.3中修复。
检查spork 。 它本质上运行一个小型服务器,运行引导,然后等待testing运行,允许您引导一次,然后从该状态多次testing。 如果您对configuration进行了某些更改,您偶尔必须重新启动它,但大部分情况下,它可以让您实现快速的红绿重构迭代。
这个问题似乎是需求的缓慢,如果你做一些最小的分析
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(另一个选项是在加载装置中看到很多,但我猜你已经知道这不是问题)。
在我的盒子(OSX上的MacBook Pro 2011 13“,核心i5和一个旋转的硬盘驱动器),时间更多的是在5秒的顺序,这仍然是很多,但方式更容忍,所以也许值得研究差异。
你已经在系统中安装了多lessgem? 你有没有尝试运行testing/引导没有捆绑/ rubygems?
无需编写“要求”声明就可以付出代价。 Rails正在尝试做正确的事情,因此预先载入了一切。 基本上你有两个解决scheme:
- 使用生成Rails进程的预加载库(例如spork )
- 不要在testing中使用Rails,提取可以在Rails之外testing的域(销毁所有软件有一个关于这个的截屏)。 它归结为跳过加载Rails ,如果可能的话。
用我所说的,使用解决scheme1)。 并让我的套件在半秒内运行(只有70次testing,但等待Rails加载的次数极less)
是的,这很慢。 哦,等一下, mvn install
在我的java日子里从来不用花不到一分钟的时间。 随着mvn clean install
它是疯狂的缓慢。 快乐的日子,记住永远让我精神振作起来。
+1,如@哈马尔所示
结合guard
https://github.com/guard/guard-test自动启动testing,你有一个杀手组合。; 让它在自己的窗口和/或屏幕上运行,并看到你的生产力上升:)
更新/添加回答:
优化技巧:把一个to_s
添加到autoload_paths的path中,在application.rb中,避免它手动做这个一遍又一遍的运行时。 可能会刮几秒钟…
正如@ user185374所说,你要支付这个require
的权衡。
我偶然发现了一个有趣的资源,可以在不使用Rails
情况下加快Rails
testing的速度……这个例子是用Rspec
给出的,但是您将拥有逻辑。
以下是作者总结:
我不能告诉你什么意思是在2秒内运行我所有的150+规格。 我认为这是一个额外的工作,但这是非常值得的努力!
我刚刚发现的另一个解决scheme: Hydra
并行testing:
http://logicalfriday.com/2011/05/18/faster-rails-tests-with-hydra/
这是一个已知的问题,特别是在Ruby 1.9.2上。
好消息是有一个补丁可以极大地加速Ruby的启动( require
)。
好消息。 升级到Ruby 1.9.3后,Rails在一段可以容忍的时间内启动。
检查出宙斯gem 。
这应该会加速相当显着。