Guard-rspec и ember плохо работают вместе

Рельсы 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

Я пробовал несколько версий игнорирования, но все равно не получается.

Проблема в основном в том, что папка tmp, которую Ember использует для создания приложения предварительного просмотра, сводит Guard с ума. И похоже, что Guard ignore на самом деле не заставляет Guard избегать папки, он все равно сканирует ее.

Как я могу заставить файл защиты игнорировать папку ember, чтобы я мог восстановить rspec-guard?

РЕДАКТИРОВАТЬ

Я отредактировал файл guardfile следующим образом:

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

Он по-прежнему терпит неудачу со следующей ошибкой (ошибок так много, что мне пришлось установить память терминала на 30 000 строк, 20 000 было недостаточно):

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

person Syl    schedule 10.08.2017    source источник
comment
Я был удивлен, увидев, что вы не можете изменить глобус File watch в Ember-cli или в сборке ember, если я не ошибаюсь.   -  person BookOfGreg    schedule 22.08.2017
comment
что за файл смотреть глобус? Проблема заключается в спецификации защиты в содержащем проекте рельсов.   -  person Syl    schedule 22.08.2017
comment
Можете ли вы попросить следить за ignore /.*/ , чтобы увидеть, сможете ли вы заблокировать все?   -  person BookOfGreg    schedule 22.08.2017


Ответы (2)


Как я писал в 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 }
...

У меня нет опыта работы с Ember, и эта брокколи, которую вы используете, может быть, проблема в конфигурации, выполненной там?

Полезной командой может быть:

LISTEN_GEM_DEBUGGING=2 bundle exec guard -d

Надеюсь, вышеизложенное поможет. Ваше здоровье!

Обновление: проверил ошибки, которые вы видите, и начал видеть их в моей настройке mock после установки broccolli-funnel, который создает символические ссылки, и гем слушателя, который использует Guard, похоже, имеет проблемы с ними, на которые у меня, к сожалению, нет времени сегодня, чтобы проанализировать глубже ... Может быть, вы можете попробовать установить Ember вне каталога rails.

person teacup_on_rc    schedule 24.08.2017
comment
У него все еще есть проблема с папкой. Вопрос отредактирован - person Syl; 24.08.2017

У Guard теперь есть способ указать, какие каталоги отслеживать. Если вы укажете только те каталоги верхнего уровня, которые вам нужны, оставив marketadmin или имя вашего подкаталога ember-cli вне списка, то он будет проигнорирован:

  directories %w[app config lib spec features]

Вам могут понадобиться дополнительные каталоги в зависимости от настроек вашего приложения, но ключ в том, чтобы исключить marketadmin.

https://github.com/guard/guard/wiki/Guardfile-DSL---Configuring-Guard#directories

person Justin Workman    schedule 28.04.2021