如何将Rails/Rspec在Windows上的加载时间优化到秒级?(带或不带spork)

如何将Rails/Rspec在Windows上的加载时间优化到秒级?(带或不带spork),windows,ruby-on-rails-3,optimization,rspec,spork,Windows,Ruby On Rails 3,Optimization,Rspec,Spork,背景: 我使用的是Engine Yard的RailsInstaller 2软件包,即Ruby 1.9.2-p290和 Windows 7 x64上的Rails 3.1.1 问题: 在尝试自动测试和spork按预期工作时和之后,rspec报告测试在几秒钟内完成,但实际消耗的时间远大于此,接近半分钟,这与屏幕广播中观察到的分秒响应相差甚远。我知道这大部分是由于Rails的加载时间(spork在预加载阶段花费的时间也很明显),以及JRuby的速度慢(与Ruby on linux相比),但是对于TDD来

背景:

我使用的是Engine Yard的RailsInstaller 2软件包,即Ruby 1.9.2-p290和 Windows 7 x64上的Rails 3.1.1

问题:

在尝试自动测试和spork按预期工作时和之后,rspec报告测试在几秒钟内完成,但实际消耗的时间远大于此,接近半分钟,这与屏幕广播中观察到的分秒响应相差甚远。我知道这大部分是由于Rails的加载时间(spork在预加载阶段花费的时间也很明显),以及JRuby的速度慢(与Ruby on linux相比),但是对于TDD来说,平均每个rspec运行15+s(考虑到加载时间,有无spork)是很难维持的。除了切换到Linux之外,是否还有其他方法可以将其缩减到几秒钟的量级


编辑:这个问题的措辞有问题吗?

这可能是目前最好的。Windows上相同的设置在Linux上只需几秒钟。我还没有在Ruby 1.9.3上进行测试,但这不太可能显著改变这种情况。

Rails加载时间相当长。 正如你提到的,这可能是TDD杀手

有几种方法可以解决这个问题:

  • 使用Guard通知fs事件,使用spork调用分叉rails,并调用在spec文件或SUT(受测主体)文件更改上运行的rspec测试
  • 将逻辑移到rails依赖类(控制器、活动记录模型)之外,改用普通ruby对象
  • 我使用这两种方法。 第二种方法有许多优点:

    • 您可以独立地测试类,而不依赖于rails
    • 测试将运行得非常快,因为您不加载rails,只加载特定的必需类
    • 它驱使您走向SRP(单一责任原则),其中每个类/模块 只占整个系统的一小部分
    • 它鼓励干燥(不要重复你自己)-当你有微小的碎片时,它更容易重复使用
    • 您正在使用DI(依赖项注入)为您的小对象提供上下文,这使它们更易于测试和重用
    必须观看:


    我最近提出了一个我在其他地方没有提到的解决方案:


    我在VirtualBox中运行Ubuntu,并将项目目录配置为共享文件夹。这意味着Ubuntu box总是能看到我的代码的最新版本,因此我可以享受linux CLI时间,并且仍然保持Windows作为我的开发平台。到目前为止,我只使用了大约一个星期的设置,但我还没有遇到任何缺点。

    谢谢你的提示,但现在我认为这是一个失败的原因,因为即使在linux上,我发现自己一直面临优化(甚至最小化)javascript测试的挑战,这往往是非常缓慢,但占了整个套房的一大部分。尽管我对Windows有着丰富的经验,但我认为Windows只足以满足最初的学习曲线(直到教程结束)。这并不是对你问题的回答,但我尝试在Windows上使用Rails,速度很慢,难度很大。为什么要让它变得比需要的更难?我建议安装Ubuntu(可以在同一台机器上完成)。我在2.5秒内运行单个测试。@甚至我开始在Windows上学习Rails,我仍然使用它进行各种用途,然后转移到Linux平台进行认真的工作。不过,有更多的选择总是好的。Ruby 1.9.3实际上要快得多。是的,但严格来说,这并不能解决本机Windows上的速度问题。使用虚拟机是一个切实可行的解决方案,但对于另一个问题(即Windows速度慢,但我需要为其他目的运行它),我完全同意。我只是想借此机会把这个选项放在那里,以防像我这样的人正在寻找一个实际的解决方案。这个解决方案类似于在windows上使用Vagrant。很好用!