Guard не видит обновления файлов - PullRequest
5 голосов
/ 05 сентября 2011

Я разрабатываю собственный движок, используя эту настройку .

Я создал движок с

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.

Есть ли способ отладки такого рода проблем?

Обновление Я создал новыйпроект (рельсовый) и установил guard-shell gem с этим Guardfile

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

Даже в этом случае, если я редактирую какие-либо файлы, ничего не происходит,Я начинаю думать, что проблема может быть где-то еще, возможно, в жемчужине rb-fsevents.Что я могу проверить?

Ответы [ 4 ]

10 голосов
/ 05 сентября 2011

Защитный файл для rspec явно не совсем правильный.Он смотрит app/controllers, но не app/models.

. Вам нужно правило вроде:

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

Измените 2-ую часть, где хранятся спецификации ваших моделей.Прошло много времени с тех пор, как я использовал rspec, не могу вспомнить макет каталога spec.

Edit:

Также странно, наблюдатель lib определяется дважды?Один раз наверху и один раз под рельсами.Интересно, является ли это 2-е определение ошибочным и подразумевается ли оно правилом для app/models.

1 голос
/ 05 сентября 2011

Хорошо, не знаю, что случилось, но проблема была в 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, и теперь он снова работает. Может быть, это была моя вина, потому что не перезагружал систему больше месяца ...

0 голосов
/ 08 апреля 2014

В моем случае Guard работает изначально. Затем я создал символическую ссылку на каталог, который он смотрит. Это прекратилось.

Предположим, он смотрит "источник / пример". Я создал символическую ссылку как «source / link_me» -> «source / example». Охранник тоже будет молчать.

0 голосов
/ 03 июля 2012

В текущей версии 1.2.2, похоже, также есть ошибка, которая показала те же симптомы, которые вы описали в моей среде.Помогло обновление до 1.2.3.

...