在Windows系统中,Rake测试非常缓慢

11

为什么Ruby及Ruby on Rails(1.8.6 One Click Installer,本地数据库)在Windows上运行如此缓慢?

  • ruby script/server - 30秒
  • rake test - 45秒
  • 等等。

然而,当我转到一个速度慢得多的linux box时,它几乎是瞬间完成的。 我已经检查了所有内容-没有重要的CPU进程正在运行,也没有网络问题...等等。

我的天,我只想要一个详细的输出,至少告诉我它在哪里出了问题。有什么建议吗?


你正在使用远程数据库吗? - Nicolas Guillaume
不,仅使用本地数据库。 - aronchick
4个回答

7
一般而言,Ruby的MRI解释器在Windows上的速度并不是很快。您可能正在Windows上以开发模式运行它,而在其他机器上则是生产模式。由于每个请求都会重新加载所有类,因此Rails在开发模式下运行得比较慢。
1.8.6是一个非常旧的Ruby版本,发布时间已经有近3年了。您应该强烈考虑升级到1.9(或至少1.8.7),或者切换到JRuby。所有这些选项都可能导致显着的性能提升。
1.8.7应该与1.8.6完全兼容。1.9有一个全新的解释器,运行速度比原来快2.5倍(尽管它有时会在Windows上偶尔崩溃)。JRuby可能是您的理想解决方案,因为您可以在兼容1.8或1.9的模式下运行它,并且非常稳定,但它不支持带有C扩展的gems,并且需要不同的数据库适配器。
最后一个选择是尝试在CentOS或其他Linux发行版的VMWare中运行Rails。

5
此外,OP可能正在使用一键安装程序,该程序现在已经相当古老,已被RubyInstaller所取代。在此时应该至少使用1.8.7版本的RubyInstaller。 - Stuart Ellis
我相信我正在使用1-click安装程序(他们应该真的从ruby-lang.org中删除它)。尽管那不是我们的生产环境,但我会尝试升级到1.9.1。JRuby是否显著更快? - aronchick
我认为他们计划在rubyinstaller“RC版本发布后”将其删除。 - rogerdpack

2
原因是Windows上的文件状态极其缓慢,而Ruby是在Linux上编写和优化的,因此没有太多的工作来加快速度。建议使用rubyinstaller.org(1.8.6或1.9.x)可以使它更快 - 我建议使用1.8.6,因为1.9也有一些减速。如果你想变得更加积极,可以尝试我的faster_gem_script gem,它尝试缓存基于require的查找并加速。不过请使用scratch版本的ruby :)不幸的是,Jruby也不以其极快的查找而闻名。希望这种情况有朝一日会改变。在那之前,我知道唯一的方法是使用我的faster_gem_script和faster_require来尝试获得一些速度提升。为了加速,您可以尝试我的loader speeder upper(帮助rails在doze中运行得更快):https://github.com/rdp/faster_require另外,请查看spork,它在doze中运行良好,jruby也很好用。

我在Doze操作系统上没有尝试过使用jruby和rails,我的直觉是它的速度与MRI差不多慢。对于1.8.7,我的答案与1.8.6相同(至于1.9.x,则通常更糟),尽管似乎1.9.2在这方面要比1.9.1快一些。[1] http://redmine.ruby-lang.org/issues/show/2723 - rogerdpack

1

更新:由于Luis Lavena在Fenix上的出色工作,Ruby 1.9.3-p327在Windows上运行速度大大提高。在1.9.3-p125上,rake执行需要110多秒,而现在在p327上只需约20秒。Rails终于可以在Windows上使用了!

请使用RubyInstaller进行安装。


1

我喜欢采用这种方法:

缓慢的Rails堆栈

在我的情况下,它是

finisher_hook: 22.463 sec

那就是罪犯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接