我正在使用此设置开发自定义引擎。
我已经创建了引擎
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
如果我在守卫运行的情况下保持一个外壳打开,而我从另一个外壳做touch app/my_model.rb
任何事情都不会发生。Guardfile 中列出的所有其他文件(模式)都相同。
有没有办法调试这类问题?
更新
我创建了一个新项目(一个rails)并用这个安装了guard-shell gemGuardfile
guard 'shell' do
watch(%r{(.*)}) {|m| `cat #{m[0]}` }
watch(%r{(.*)}) {|m| raise m.to_s }
end
即使在这种情况下,如果我编辑任何文件,也不会发生任何事情。我开始认为问题可能出在其他地方,也许在rb-fsevents
宝石中。我可以检查什么?