为什么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/引导没有捆绑/ ruby​​gems?

无需编写“要求”声明就可以付出代价。 Rails正在尝试做正确的事情,因此预先载入了一切。 基本上你有两个解决scheme:

  1. 使用生成Rails进程的预加载库(例如spork
  2. 不要在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情况下加快Railstesting的速度……这个例子是用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 。

这应该会加速相当显着。