5

このセットアップを使用してカスタムエンジンを開発しています。

私はエンジンを作成しました

rails plugin new MyEngine --full

次に、開発の依存関係として追加rspec-railsしましたguard-rspec

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

私のgemspecファイルにあります。

両方を実行する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

ガードを実行したままシェルを開いたままにして、別のシェルから実行してtouch app/my_model.rbも何も起こりません。Guardfileにリストされている他のすべてのファイル(パターン)についても同じです。

この種の問題をデバッグする方法はありますか?

アップデート 私は新しいプロジェクト(レールプロジェクト)を作成し、これを使ってガードシェルジェムをインストールしましたGuardfile

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

この場合でも、ファイルを編集しても何も起こりません。rb-fsevents問題はどこか別の場所、おそらく宝石にあるのではないかと私は考え始めています。何を確認できますか?

4

4 に答える 4

10

rspecのガードファイルは明らかに正しくありません。見ていますが、見てapp/controllersいませんapp/models

次のようなルールが必要です。

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

2番目の部分を、モデルの仕様が保持されている場所に変更します。rspecを使用してからしばらく経ちましたが、specディレクトリのレイアウトを思い出せません。

編集:

また奇妙なことに、libウォッチャーは2回定義されていますか?1回は上部に、もう1回はレールの下にあります。その2番目の定義は間違いであり、のルールになることを意図していたのではないかと思いますapp/models

于 2011-09-05T19:13:53.427 に答える
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が「ロック解除」され、再び機能するようになりました。システムを1か月以上再起動しなかったので、おそらくそれは私のせいでした...

于 2011-09-05T19:59:10.053 に答える
0

また、現在のバージョン1.2.2にもバグがあるようです。これは、私の環境で説明したのと同じ症状を示しました。1.2.3へのアップデートが役に立ちました。

于 2012-07-03T09:41:08.737 に答える
0

私の場合、Guardは最初は機能します。次に、監視するディレクトリへのシンボリックリンクを作成しました。止まった。

「ソース/例」を監視しているとします。「source/link_me」->「source/example」としてシンボリックリンクを作成しました。警備員も黙っていたでしょう。

于 2014-04-08T15:46:59.087 に答える