Ruby 如何加速 rails test,windows 环境

rumengruhuanyue · 2019年07月30日 · 最后由 Rei 回复于 2019年08月02日 · 5130 次阅读

如何加速测试速度(rails test 命令)

最近在学习 ror, 每次写完测试,执行

rails test

都要花费很长时间,大概半分钟多的样子。每次改动一点测试内容,再次测试就要再次花费半分钟多的样子,耽误时间。

我的环境

  1. Rails 5.2.3
  2. ruby 2.6.3p62 (2019-04-16 revision 67580) [x64-mingw32]

已经做过的尝试

搜索到一篇文章:Run faster Ruby on Rails tests,里面提到了三个方案(三个 gem 库)

  1. zeus——Boot any rails app in under a second.号称执行速度达到低于一秒,真的很诱人!!!
  2. parallel_tests——我的大致理解为 CPU 并行执行 test 任务,提升效率
  3. zeus-parallel_tests——前两者的组合,来提升效率

遇到的问题

  1. 首先,选择上面第 3 个 gem zeus-parallel_tests按照 github 上面的方法来操作,但是执行bundle exec zeus start报错了;
  2. 然后,才发现这个库好像太老了,好几年前的;
  3. 然后,退而求其次,使用zeus,这时候才发现要求环境为OS X 10.7+ OR Linux 2.6.13+
  4. 我的环境是 windows 7,导致无法运行

再次尝试

这次找支持 windows 的可以加速测试的方法

搜索到Ruby on Rails Zeus Alternative for Windows? [closed] 找到一个新方案:使用 Sport 加速 #285 Sport

但是这次又出现了问题:

$spork --bootstrap

I can't find any testing frameworks to use. Are you running me from a project directory?

另外,parallel_tests此方式执行到 rake parallel:setup(下面的内容没操作)未见到成效,下面的操作不太清楚怎么回事。

请求加速 rails test 的方法,提前表示感谢,谢谢!!

目前没啥很好的办法,可以尝试在 wsl 下工作,明年初 wsl 2 发布会把目前唯一的短板 io 性能解决

推荐 vagrant 或 wsl 2

可能是 windows 用不了 spring

(Spring makes extensive use of Process.fork, so won't be able to provide a speed up on platforms which don't support forking (Windows, JRuby))

kikyous 回复

vagrant :

Say goodbye to "works on my machine" bugs.

Vagrant is designed for everyone as the easiest and fastest way to create a virtualized environment!

看上去不错!

5 楼 已删除
jasl 回复

我在很久前安装过 VMware Workstation 安装了 CentOS,请问如何配合当前工作。我 Ruby 编辑器和环境都装在了 windows 上,虚拟机上什么都没有

就 rvm 安装 ruby 然后该怎么用怎么用了呀 vagrant 这类工具能帮你打通虚拟机和宿主机 但是具体怎么用我也没深入过

最好还是升级到 win10 用 WSL,几乎没有虚拟机和宿主机的隔阂,IO 有短板但是很快就会解决了

parallel_tests

这个目前项目在用,感觉挺有效的,可以提速不少。

本地测试的话,可以只测试修改的文件,或者指定测试某个用例。

$ bundle exec rspec spec/models/user_spec.rb
$ bundle exec rspec spec/models/user_spec.rb:30 # 测试第30行的用例

先搞明白慢在哪里再说吧

Windows 10 WSL 所有问题不再是问题

vagrant 默认的虚拟机 virtualbox 共享目录的 IO 依然很慢,我觉得 WSL 会快点,没测过。

Rei 回复

WSL1 目前执行 rake 还是比较慢,可能和权限之类的东西有关,没有深究,因为 WSL2 就要出来了。Inside 的 Win 10 已经可以使用 WSL2 了,不过生产机器没敢安装,我等正式版。

Ruby on Rails on Windows is not just possible, it's fabulous using WSL2 and VS Code https://www.hanselman.com/blog/RubyOnRailsOnWindowsIsNotJustPossibleItsFabulousUsingWSL2AndVSCode.aspx

需要 登录 后方可回复, 如果你还没有账号请 注册新账号