not*_*ere 11 rspec ruby-on-rails guard spork ruby-on-rails-3
我正在使用以下宝石和ruby-1.9.3-p194:
轨道3.2.3
rspec-rails 2.9.0
spork 1.0.0rc2
警卫队0.6.1
此Gemfile.lock或Gemfile中提供了已使用gems的完整列表.
我正在使用此配置文件:
如果我修改任何模型(或app/validators等等中的自定义验证器)重新加载代码不起作用.
我的意思是当我运行规格(在防守控制台上按Enter键)Spork包含"旧代码",我得到过时的错误消息.但是当我手动重启Guard和Spork(CTRC-C CTRL-d后卫)时,一切正常.但几次后它已经累了.
问题:
有人可以看看我的配置文件并修复阻止更新代码的错误.
或者这可能是最新Rails版本的问题?
PS这个问题在一些项目中重复并重复(在某些项目上).但我还没弄清楚为什么会发生这种情况.
PS2也许这个问题与此有关ActiveAdmin?当我在app/admin代码中更改文件时重新加载.
解决方法:
# config/environments/test.rb
config.cache_classes = false
Run Code Online (Sandbox Code Playgroud)
但这是"双刃剑".
规格现在运行时间延长了2.0倍.但它仍然比一次又一次重启Spork更快.
使用宙斯.它完美地运作.基准位于底部..
如果你正在使用1.9.3考虑安装特殊的补丁,真正加快加载应用程序.
背景与基准:
我有一个非常大的1.9.3应用程序,我想加速应用程序加载,Spork不工作,所以我开始寻找其他解决方案:
我写了一个空的规范,看看加载我的应用需要多长时间
- /规格/ empty_spec.rb
require 'spec_helper'
describe 'Empty' do
end
Run Code Online (Sandbox Code Playgroud)
平原1.9.3
time rspec spec/empty_spec.rb 64,65s user 2,16s system 98% cpu 1:07,55 total
1.9.3 + rvm补丁集
time rspec spec/empty_spec.rb 17,34s user 2,58s system 99% cpu 20,047 total
1.9.3 + rvm patchsets + zeus
time zeus test spec/empty_spec.rb 0,57s user 0,02s system 58% cpu 1,010 total
[w00t w00t!]
或者,您可以为模型,控制器和其他代码添加防护.当任何这些文件发生变化时,它会使警卫重新加载spork.
guard 'spork',
:rspec_env => {'RAILS_ENV' => 'test'} do
watch(%r{^app/models/(.+)\.rb$})
watch(%r{^lib/(.+)\.rb$})
end
Run Code Online (Sandbox Code Playgroud)
我有同样的问题.重新加载测试并成功运行以更改model_spec.rb.当我对model.rb文件进行更改时,重新运行了测试,但代码似乎被缓存 - 因此未应用更改.
它需要一些答案的组合才能使事情顺利进行:
# /config/environments/test.rb
config.cache_classes = !(ENV['DRB'] == 'true')
# spec_helper.rb
Spork.each_run do
.....
ActiveSupport::Dependencies.clear
end
Run Code Online (Sandbox Code Playgroud)
我还将spork更新为(1.0.0rc3)并用spork-rails替换了spork gem,如上面的@ 23inhouse所述.但是,我没有看到gemfile中的任何一个gem之间有任何区别,尽管升级spork可能会产生影响.
希望这有助于其他人不再花费更多时间撞到墙上.