我正在使用this setup开发自定义引擎。
我用
创建了引擎rails plugin new MyEngine --full
然后我使用
添加了rspec-rails
和guard-rspec
作为开发依赖项
s.add_development_dependency "rspec-rails"
s.add_development_dependency "guard-rspec"
在我的gemspec文件中。
当我同时运行rspec
和rake spec
(有或没有bundle exec
)时,我的规格运行正常。当我运行guard
命令时,它会首次运行所有规范,然后它什么都不做。它不会检测整个应用程序中的任何文件更改。
Guardfile与guard init spec
一样生成,这是其内容
# A sample Guardfile
# More info at https://github.com/guard/guard#readme
guard 'rspec', :version => 2 do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec/" }
# Rails example
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
watch(%r{^spec/support/(.+)\.rb$}) { "spec/" }
watch('spec/spec_helper.rb') { "spec/" }
watch('config/routes.rb') { "spec/routing" }
watch('app/controllers/application_controller.rb') { "spec/controllers" }
# Capybara request specs
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
end
如果我保持一个shell打开,后卫运行,我从另一个shell touch app/my_model.rb
做任何事情。对于Guardfile中列出的每个其他文件(模式)都是一样的。
有没有办法调试这类问题?
更新
我已经创建了一个新项目(一个是rails)并使用此Guardfile
guard 'shell' do
watch(%r{(.*)}) {|m| `cat #{m[0]}` }
watch(%r{(.*)}) {|m| raise m.to_s }
end
即使在这种情况下,如果我编辑任何文件也没有任何反应。我开始认为问题可能在其他地方,也许在rb-fsevents
宝石中。我可以检查什么?
答案 0 :(得分:10)
rspec的警卫文件显然不太正确。它正在关注app/controllers
,但不是app/models
。
您需要一条规则:
watch(%r{^app/models/(.+)\.rb$}) {|m| "spec/models/#{m[1]}_spec.rb" }
将第二部分更改为保留模型规格的位置。自从我使用rspec以来已经有一段时间了,不记得规格目录布局了。
编辑:
同样奇怪的是,lib观察者被定义了两次?一旦在顶部,一旦在轨道下。我想知道第二个定义是否是一个错误,并且意味着app/models
的规则。
答案 1 :(得分:1)
好的,不知道出了什么问题,但问题出在fseventd,这在某种程度上是冻结的。
在没有解决问题的情况下运行警卫,所以问题不在于警卫本身
> guard
Please install rb-fsevent gem for Mac OSX FSEvents support
Using polling (Please help us to support your system better than that.)
Please install growl or growl_notify gem for Mac OS X notification support and add it to your Gemfile
此外,系统重启(不知道如何重启守护进程)已“解锁”fseventd,现在又重新启动了。也许这是我的错,因为没有重启系统一个多月......
答案 2 :(得分:0)
当前版本1.2.2中似乎也存在一个错误,其中显示的症状与您在我的环境中描述的相同。更新到1.2.3有帮助。
答案 3 :(得分:0)
就我而言,Guard最初工作。然后我创建了一个指向它所监视的目录的符号链接。停了。
假设它观察"源/示例"。我创建了一个符号链接" source / link_me" - > "源极/示例&#34 ;.警卫也会保持沉默。