Ruby GuardFile - почему процесс перезапускается дважды - PullRequest
1 голос
/ 22 сентября 2011

У меня есть установка Guard (гем Ruby, который реагирует на события файловой системы - https://github.com/guard/), который компилирует файлы кофе в Javascript, а также перезапускает сервер node.js при изменении соответствующих файлов js.

Вот мой Guardfile из каталога моего проекта:

guard 'process',
  :name => 'SPCRM Server',
  :command => 'node --debug server/js/app.js' do
    watch(%r{^server/js/.+\.js$})
  end

guard 'coffeescript',
  :input => 'app/coffee',
  :output => 'app/js'

guard 'coffeescript',
  :input => 'server/coffee',
  :output => 'server/js'

Когда я изменяю соответствующий файл .coffee (чтобы сервер / js / файл обновлялся), процесс перезапускается дважды . Измените вручную файл server / js / *. Js, и он перезапускается только один раз (как и ожидалось), что заставляет меня поверить, что по некоторым причинам он делает два прохода.

Вот вывод, работающий с guard -d

debugger listening on port 5858DEBUG (19:30:26): Guard::CoffeeScript#run_on_change with ["server/coffee/app.coffee"]
DEBUG (19:30:26): Hook :run_on_change_begin executed for Guard::CoffeeScript
DEBUG (19:30:26): Command execution: command -v nodejs 2>/dev/null
DEBUG (19:30:26): Command execution: command -v node 2>/dev/null
DEBUG (19:30:26): Command execution: command -v /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc 2>/dev/null
DEBUG (19:30:26): Command execution: command -v js 2>/dev/null
DEBUG (19:30:26): Command execution: command -v cscript 2>/dev/null
Compile server/coffee/app.coffee
Successfully generated server/js/app.js
Stopping process SPCRM Server
Stopped process SPCRM Server
Starting process SPCRM Server
Started process SPCRM Server
DEBUG (19:30:27): Hook :run_on_change_end executed for Guard::CoffeeScript
DEBUG (19:30:27): Guard::Process#run_on_change with ["server"]
DEBUG (19:30:27): Hook :run_on_change_begin executed for Guard::Process
Stopping process SPCRM Server
Stopped process SPCRM Server
Starting process SPCRM Server
Started process SPCRM Server
DEBUG (19:30:27): Hook :run_on_change_end executed for Guard::Process
debugger listening on port 5858

Мои знания по Ruby ограничены, поэтому, хотя я прочитал часто задаваемые вопросы, примеры, вики, rubydocs, я все еще не знаю, кто такой. Казалось бы, после первого совпадения правила каскадируются, а затем применяются снова.

Мое ожидание будет таким:

  1. Обновите файл в моем редакторе и сохраните сервер / кофе / app.coffee
  2. Guard распознает это, и плагин Guard-Coffeescript перезаписывает сервер / js / app.js
  3. Guard распознает, что server / js / app.js изменился, и Guard-Process перезапускает сервер узла.

Может ли кто-нибудь помочь мне решить эту незначительную досаду или просветить меня о том, как Guard обрабатывает мои события Guardfile / FS?

Это использует свежий Ruby 1.9 (установленный через Homebrew), последнюю версию Guard и плагины, включая гем событий fs, на Mac OX Lion.

...