繁体   English   中英

为什么rails bootstrap这么慢,我该怎么办呢?

[英]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:

有些事情需要C代码在1.9中做的事情会减慢速度。 一个这样的例子是重新检查$ LOAD_PATH以确保它在所有需求上都被扩展。 这是ruby-core应该解决的问题。 如果没有redmine,我会在redmine上打开一张票。

我也遇到了这个问题,$ LOAD_PATH问题似乎是一个潜在的原因。 让我们希望很快得到修复。

所以听起来像你只需要忍受这一点,希望它将在Ruby 1.9.3中修复。

问题似乎是需求的缓慢,如果你做一些最小的分析,如

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秒,这仍然很多,但更容易忍受,所以也许值得调查差异。

你在系统中安装了多少颗宝石? 您是否尝试在没有bundler / ruby​​gems的情况下运行测试/启动?

支付不必编写“要求”声明是一种权衡。 Rails正在尝试做正确的事情,因此预先加载一切。 基本上你有两个解决方案:

  1. 使用产生Rails进程的预加载库(例如spork
  2. 不要在测试中使用Rails,提取可以在Rails之外测试的域(Destroy All Software有一个关于此的截屏视频)。 如果可能的话,它归结为跳过加载Rails

尽管如此,使用解决方案1)。 让我的套件运行不到半秒(只有70次测试,但是等待Rails加载的次数很少)

是的,它的速度非常缓慢。 哦等等,在我的java天mvn install永远不会花不到一分钟。 使用mvn clean install它很疯狂。 快乐的日子,记住总会让我的精神振作起来。

正如@hammar建议的那样,+1 spork

结合guard https://github.com/guard/guard-test自动启动测试,你有一个杀手组合。 让它在自己的窗口和/或屏幕上运行,看看你的工作效率上升:)

更新/补充回答:

优化提示:在application.rb中添加到autoload_paths的路径上放置to_s ,避免它一遍又一遍地手动执行此操作。 可能会刮掉几秒钟......

正如@ user185374说,你付出的权衡require

我偶然发现了一个有趣的资源来加速Rails测试而不使用Rails ......这个例子是用Rspec给出的,但你会有逻辑。

以下是作者总结的方式:

我无法告诉你在2秒内运行我所有的150多个规格意味着什么。 我认为这是一项额外的工作,但值得付出努力!

我刚发现的另一个解决方案: Hydra并行测试:

http://logicalfriday.com/2011/05/18/faster-rails-tests-with-hydra/

这是一个已知问题,特别是在Ruby 1.9.2上。

好消息是,有一个补丁可以极大地加速Ruby的启动( require )。

好消息。 升级到Ruby 1.9.3后,Rails在一段可容忍的时间内启动。

看看宙斯宝石

这应该会显着加快速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM