2011-09-05 115 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」。警衛也會保持沉默。