Можно ли использовать оба этих пакета вместе?
Так что в основном я хочу иметь лучшее из обоих миров. Запуск сервера автоматически (и перезапуск при возникновении ошибки), а также автоматическое обновление при изменении файла .js.
Можно ли использовать оба этих пакета вместе?
Так что в основном я хочу иметь лучшее из обоих миров. Запуск сервера автоматически (и перезапуск при возникновении ошибки), а также автоматическое обновление при изменении файла .js.
Вы должны запустить что-то вроде этого
forever start -c nodemon app.coffee
Toxa был на правильном пути, вопрос, который cfogelberg поднял, действителен, но чтобы избежать этой проблемы, вы можете сделать следующее:
forever -c "nodemon --exitcrash" app.js
это гарантирует, что nodemon
действительно выйдет (вместо того, чтобы дать вам сообщение об ошибке приложения), а затем forever
снова забирает его.
В forever --help
этот -c
указывает команду для запуска в противном случае по умолчанию node. Без -c приводит к ошибке, упоминаемой в комментариях к этому ответу.
Есть запись об этом в nodemon
FAQ:
Если вы используете nodemon с forever (возможно, в производственная среда), вы можете объединить их вместе. Таким образом, если сбой script, навсегда перезапустит script, и если есть файл изменения, nodemon перезапускает ваш script. Более подробно см. issue 30.
Для этого вам нужно добавить следующее:
forever
:
- Использовать forever
-c nodemon
вариант, чтобы навсегда верить запускnodemon
вместоnode
.- Включить флаг nodemon
--exitcrash
, чтобы обеспечить выход nodemon, если script сбой (или неожиданно завершается).- При запросе nodemon навсегда использовать
SIGTERM
вместоSIGKILL
. Это гарантирует, что nodemon может остановить просмотренный nodeобрабатывать чисто.- Необязательно добавьте параметр
--uid
, добавив уникальное имя для вашего процесса. В этом примере uid установлен наfoo
.
bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js
Чтобы проверить это, вы можете убить процесс server.js и навсегда перезапустите его. Если вы
touch server.js
nodemon перезапустите его.Чтобы остановить процесс, контролируемый навсегда и nodemon, просто вызовите следуя, используя
uid
, который мы назначили выше (foo
):
bash forever stop foo
Это остановит процесс nodemon и node, который он контролировал.
Обратите внимание, что я бы не рекомендовал использовать nodemon в производстве окружение - но это потому, что я не хочу, чтобы он перезапускался без моего явная инструкция.
Я не нашел способ совместного использования обоих пакетов. Я пытался использовать технику @toxa, но когда мое приложение node.js выбрало исключение, nodemon не будет автоматически перезапускать его, вместо этого выводит сообщение об ошибке на вечный журнал:
nodemon] app crashed - waiting for file changes before starting...
Однако навсегда есть опция -w
, и следующая команда будет фактически такой же, как если бы я запускал nodemon и навсегда вместе:
forever start -w my-app.js
Недостаток forever -w
по сравнению с nodemon
: forever
не имеет опции -delay, поэтому мой сервер перезапускается один раз для каждого измененного файла.
Я предпочитаю комбо того, что предлагают Токса и Джубайр.
forever start -c nodemon app.coffee --exitcrash
Если вам нужно передать аргументы:
forever start -c "nodemon --harmony" app.js --exitcrash
Я использую forever-service.,
Это то, что сработало для меня. Он выполняет следующие действия: каждый раз, когда файл json или raml в папке dist/assets приложений изменяется, подождите 10 секунд, а затем перезапустите приложение node (server.js script):
$ forever-service install raml --script server.js -f " -c nodemon" -o " --delay 10 --watch dist/assets -e json,raml --exitcrash" -e "PATH=/usr/local/bin:$PATH"
Затем я могу запустить:
$ service raml start|stop|restart|status
Я также могу запустить службу при перезагрузке сервера с помощью утилиты chkconfig:
$ chkconfig --add raml
$ chkconfig raml on