OSX RoR Guard无法自动运行某些文件的文件更新

时间:2012-10-31 23:07:12

标签: ruby rspec guard fsevents

我绝对感到困惑......(而且非常沮丧......)

由于某些原因,后卫并未检测到osx上的文件更新,但仅针对某些文件。它几乎就像手表功能中定义的正则表达式无法正常工作......

我创建了一个全新的rails应用程序,用于摆弄以下Ryans后卫护栏 - http://railscasts.com/episodes/264-guard

并且具有由;

生成的默认保护文件
guard init spec

看起来像这样;

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'rspec', :cli => "--color --format nested --fail-fast" 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{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#    {m[2]}_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('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" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

如果我在spec目录中编辑application_controller.rb或spec文件,后卫将自动运行正常。

但如果我编辑并保存任何其他控制器,则没有任何反应。

guardbundle exec guard同时保持警惕,没有区别;它只运行整个套件,然后在一个提示符处坐下。

macbook pro os v10.6.8。
RVM与Ruby-1.9.3-p286和Rails 3.2.8 rb-fsevent 0.9.2

我的一个同事正在使用相同的系统规格(公司发布的mbp' s)从git中直接运行完全相同的东西,这对他有效。

当他编辑app/home_controller.rb并且只是给它一个额外的线或什么时,点击保存..测试开始。

当我编辑文件并点击保存时,没有任何反应,但是如果我编辑app/application_controller.rb它会触发..

我很困惑......我很沮丧......我需要帮助,因为我不知所措......

思想?

1 个答案:

答案 0 :(得分:2)

看起来rb-fsevent是OS X 10.6的问题。您可以尝试通过在rb-fsevent中设置固定版本来使用旧版Gemfile

gem 'rb-fsevent', '0.9.0'

或者您可以通过切换到轮询解决问题:

bundle exec guard --force-polling