Fil*_*uzi 1 ruby rspec ruby-on-rails mongodb ruby-on-rails-4
我们将Mongodb和RSpec用于我们的项目.在我的OS X机器上,单个控制器的RSpec运行于:
Finished in 0.24996 seconds (files took 25.39 seconds to load)
另一方面,我的朋友有Ubuntu和他相同的规格运行:
Finished in 0.27996 seconds (files took 4.05 seconds to load)
加载时间超过我机器的6倍.可能是什么原因?
PS不使用OS X不是解决方案:/
有关我们设置的更多信息:
我们都使用ruby 2.2.我们通过guardfile运行specscmd: bundle exec rspec
我的朋友使用rbenv并which rspec返回
"/家庭/张丹/ .rbenv /垫片/ rspec`
我使用rvm并which rspec返回:
$ which rspec
rspec: aliased to bundled_rspec
$ which bundled_rspec
bundled_rspec () {
_run-with-bundler rspec $@
Run Code Online (Sandbox Code Playgroud)
我刚刚克隆了https://github.com/eliotsykes/rspec-rails-examples并运行了rspec.加载文件花了36多秒.所以这不是与mongodb有关.我刚刚注意到rails服务器也加载了很长时间.
> time rspec -v
3.3.2
real 0m2.539s
user 0m1.067s
sys 0m0.185s
Run Code Online (Sandbox Code Playgroud)
Ale*_*ein 11
看起来像我的一些捆绑加载问题.我建议做一些更多的测量.你是每个项目使用1个gemset还是将所有东西都存储在1个gemset中(如果你不使用任何东西,那是真的吗?)如果你在1个目录中有很多宝石(即所有人都有1个宝石),它最终会减慢捆绑器的速度,因为它需要遍历更多的路径来完成它的工作.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Run Code Online (Sandbox Code Playgroud)
如果gem list -q | wc -l报告相当大的价值(我已经237和我的一切看起来都很正常),也许您需要将已安装的宝石拆分为每个项目的单独gemset.
使用time命令进行更多测量,查找real值,它是总和.
首先,删除你的bundled_rspec包装,最新的RVM版本不需要它.
然后使用和不使用Bundler测量你的rspec加载:
time rspec -v # with implicit bundler loading, rubygems-bundler gem is in use
time NOEXEC_DISABLE=1 rspec -v # without bundler, disable rubygems-bundler gem for this call`
Run Code Online (Sandbox Code Playgroud)
time rspec -v即使对于具有相对较小的Gemfile的项目,如果给你大数字,那也是一个捆绑问题.
下一个瓶颈通常是Rails本身.尝试测量一个不加载Rails的测试(即刚刚spec_helper测试),然后用导轨测试(即用rails_helper).
一旦你开始看到数字上的巨大差异,你就会知道你遇到问题的地方.
作为改善导轨性能的快速解决方案是spring宝石的用途.如果你使用Rails 4.1+ Spring已经启用.
启用Spring以rspec添加到您的Gemfile
gem 'spring-commands-rspec', group: :development
Run Code Online (Sandbox Code Playgroud)
并运行
$ bundle install
$ spring binstub --all
Run Code Online (Sandbox Code Playgroud)
最后一个命令将为项目bin文件夹中所有弹簧支持的二进制文件生成包装器(看看那里并且不要忘记提交它们).在此之后,你应该运行rspec使用bin/rspec.首次运行仍然很慢,但由于Rails已经加载,因此所有后续运行应该足够快.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |