У меня есть установка 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, я все еще не знаю, кто такой. Казалось бы, после первого совпадения правила каскадируются, а затем применяются снова.
Мое ожидание будет таким:
- Обновите файл в моем редакторе и сохраните сервер / кофе / app.coffee
- Guard распознает это, и плагин Guard-Coffeescript перезаписывает сервер / js / app.js
- Guard распознает, что server / js / app.js изменился, и Guard-Process перезапускает сервер узла.
Может ли кто-нибудь помочь мне решить эту незначительную досаду или просветить меня о том, как Guard обрабатывает мои события Guardfile / FS?
Это использует свежий Ruby 1.9 (установленный через Homebrew), последнюю версию Guard и плагины, включая гем событий fs, на Mac OX Lion.