Rails 4.2.7 Guard-RSpec 4.7.3

由于我安装了ember-cli-rails,因此ember应用会阻止Guard-spec运行并触发数百个错误。
这是一个错误:

Directory: /home/sylvain/dev/placedemarche/marketadmin/tmp/broccoli_merge_trees-output_path-rlX3b4rm.tmp/marketadmin/tests/unit

    is already being watched through: /home/sylvain/dev/placedemarche/marketadmin/tmp/broccoli_persistent_filterbabel__babel_marketadmin-output_path-Nv8C3Z67.tmp/marketadmin/tests/unit

    MORE INFO: https://github.com/guard/listen/wiki/Duplicate-directory-errors
    ** ERROR: directory is already being watched! **


我在保护文件中尝试了多种操作,甚至删除了所有手表:

guard 'rspec',:cli => "--drb --format progress",all_after_pass: false do
  # ignore /marketadmin/
  # watch(%r{^spec/(.+)_spec\.rb$}) { |m| "spec/#{m[1]}_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" }
end


我尝试了多个版本的ignore,但是仍然失败。

问题基本上是tmp文件夹ember用于生成预览应用程序使后卫发疯了。而且似乎警卫队忽略并不能真正使警卫队避开该文件夹,它仍会对其进行扫描。

如何使Guard文件忽略ember文件夹,以便还原rspec-guard?

编辑

我已经如下编辑了防护文件:

guard 'rspec',:cli => "--drb --format progress",all_after_pass: false do
  ignore(%r{^marketadmin/(.+)})
end


它仍然会失败,并显示以下错误(有太多错误,我不得不将终端内存设置为30 000行,而20000不够):

18:24:39 - INFO - Guard::RSpec is running
18:24:39 - DEBUG - Hook :start_end executed for Guard::RSpec
D, [2017-08-24T18:25:00.166155 #20128] DEBUG -- : Waiting for processing to start...
18:25:00 - INFO - Guard is now watching at '/home/sylvain/dev/placedemarche'
18:25:00 - DEBUG - Start interactor
        ** ERROR: directory is already being watched! **

        Directory: /home/sylvain/dev/placedemarche/marketadmin/tmp/funnel-input_base_path-WVhWKrYs.tmp

        is already being watched through: /home/sylvain/dev/placedemarche/marketadmin/node_modules/qunit-notifications

        MORE INFO: https://github.com/guard/listen/wiki/Duplicate-directory-errors
        ** ERROR: directory is already being watched! **

        Directory: /home/sylvain/dev/placedemarche/marketadmin/tmp/funnel-input_base_path-ULeE6XMF.tmp

        is already being watched through: /home/sylvain/dev/placedemarche/marketadmin/app

        MORE INFO: https://github.com/guard/listen/wiki/Duplicate-directory-errors

最佳答案

正如我在IRC频道中写的那样,我不太了解,您尝试避免使用哪个子文件夹?

如果我将我的保护文件添加到语句ignore(%r{frontend/(.+)})的顶部,或者在您的情况下,添加到ignore(%r{marketadmin/(.+)})语句,则可以非常成功地忽略前端应用程序中发生的任何事情。

我的Guardfile看起来像:

guard :rspec, cmd: "bundle exec rspec" do
  require "guard/rspec/dsl"
  dsl = Guard::RSpec::Dsl.new(self)

  # Feel free to open issues for suggestions and improvements

  ignore(%r{frontend/(.+)})
  # RSpec files
  rspec = dsl.rspec
  watch(rspec.spec_helper) { rspec.spec_dir }
...


我没有使用余烬的经验,而您正在使用的这花椰菜东西,也许问题是在那里完成了配置?

一个有用的命令可以是:

LISTEN_GEM_DEBUGGING=2 bundle exec guard -d


希望以上帮助。
干杯!

更新:安装mock之后,检查了您所看到的错误,并开始在我的broccolli-funnel设置中看到这些错误,这会创建符号链接,而Guard使用的监听器gem似乎有问题,我没有不幸的是,今天有时间分析更深...
也许您可以尝试将ember移出rails目录的设置。

10-07 18:58
查看更多