2011-09-05 128 views
5

我正在使用this setup开发定制引擎。Guard没有看到文件更新

我已经在我的gemspec文件创建了

rails plugin new MyEngine --full 

然后我添加rspec-railsguard-rspec的发展依赖发动机与

s.add_development_dependency "rspec-rails" 
s.add_development_dependency "guard-rspec" 

当我运行rspecrake 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 touch app/my_model.rb什么也没有发生事情。 Guardfile中列出的每个其他文件(模式)都相同。

有什么办法可以调试这类问题吗?

更新 我创建了一个新的项目(一轨之一),与此Guardfile

guard 'shell' do 
    watch(%r{(.*)}) {|m| `cat #{m[0]}` } 
    watch(%r{(.*)}) {|m| raise m.to_s } 
end 

安装guard-shell宝石即使在这种情况下,如果我修改什么也不会发生任何文件。我开始认为问题可能在其他地方,也许在rb-fsevents宝石。我可以检查什么?

回答

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和现在它再次运作。也许这是我的错,因为没有重启系统超过一个月...

10

rspec的guard文件显然不太正确。它正在观看app/controllers,但不是app/models

你会需要像一个规则:

watch(%r{^app/models/(.+)\.rb$}) {|m| "spec/models/#{m[1]}_spec.rb" } 

更改第二部分到你的模型规格将被保留。自从我使用rspec以来已经有一段时间了,不能记住spec目录的布局。

编辑:

而且奇数时,LIB观察者被定义了两次?一次在顶部,一次在轨道下。我想知道第二个定义是否是一个错误,并且意在成为app/models的规则。

+0

你说得对,我会更新(默认)生成的文件。但这不是问题。看到我的编辑问题。 – Fabio

+0

啊我看到了......你可以用一个--debug标志跑卫,但我认为你可能已经尝试过了。 – numbers1311407

+0

是的,我试过了,thx。我刚刚解决了系统重新启动,请参阅[我的答案](http://stackoverflow.com/questions/7311405/guard-doesnt-see-file-updates/7312249#7312249)。 – Fabio

0

当前版本1.2.2中似乎还有一个错误,它显示了与您在我的环境中描述的相同的症状。更新到1.2.3有所帮助。

0

对我而言,Guard最初工作。然后我创建了一个到它所观察目录的符号链接。停了。

假设它看着“source/example”。我创建了一个符号链接作为“source/link_me” - >“source/example”。警卫也会保持沉默。