2013-05-03 3 views
39

Есть ли способ, чтобы оба этих пакета работали вместе?Forever + Nodemon работает вместе

Так что в основном я хочу иметь лучшее из обоих миров. Запуск сервера автоматически (и перезагрузка при возникновении ошибки), а также автоматические обновления при изменении файла .js.

ответ

55

Вы должны запустить что-то вроде этого

forever start -c nodemon app.coffee 
+0

Спасибо. Это сработало! –

+5

Вы должны увидеть ответ cfogelberg по этому вопросу за слабость этого решения. У моего ответа есть обходное решение для него. – Jubair

+0

не работает для большого количества пользователей, посетив это http://stackoverflow.com/questions/29536649/node-server-crashes-after-few-hours –

10

я не нашел способ получения обоих пакетов, работающих вместе. Я пытался сделать @ технику 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 варианта, так что мой сервер перезапускается один раз для каждого файл, который был изменен.

39

Toxa был на правильном пути, то вопрос, что cfogelberg raised действует, но, чтобы избежать этой проблемы вы можете сделать следующее:

forever -c "nodemon --exitcrash" app.js 

это делает, что nodemon на самом деле выходит (а не давая вам «приложение crashed "), а затем forever снова подбирает его.

В forever --help этот -c задает команду для запуска в противном случае по умолчанию. Без -c приводит к ошибке, упоминаемой в комментариях к этому ответу.

+1

спасибо, это работает намного чище – cfogelberg

+1

Я не могу заставить это работать: «Невозможно начать вечно. script/current_working_directory/nodemon не существует. «Есть ли способ исправить это? Я установил nodemon как локально, так и глобально через npm. –

+0

Я не мог заставить это работать, получив сообщение об ошибке, что скрипт 'nodemon' не существует. Поэтому, очевидно, он пытается «навсегда начать nodemon», но я не могу понять, как сделать start app.js * через * nodemon. Думаю, я просто буду жить с перезагрузкой для каждого изменения файла, но это кажется довольно неэффективным. – AJB

5

Я предпочитаю комбо того, что предлагает Тоха и Джубейр.

forever start -c nodemon app.coffee --exitcrash 
+0

Я понятия не имею, почему, но это единственная команда, которая сработала для меня. Я новичок в этом и использую экспресс, а сервер по умолчанию теперь находится в 'bin/www'. Таким образом, запуск 'forever start -c nodemon bin/www -exitcrash' наконец-то получил эту работу. Спасибо! –

+0

@akevit Это потому, что именно так настроен ваш сервер. Это настраивается. Вы можете настроить его для запуска своего сервера таким образом, который наилучшим образом подходит для вас. – bcbrian

1

Я пользуюсь forever-service. , ,

Это то, что сработало для меня. Он выполняет следующие действия: каждый раз, когда файл json или raml в папке dist/assets приложений изменяется, подождите 10 секунд, а затем перезапустите приложение узла (сервер.JS скрипт):

$ 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 
+1

Для просмотра изменений .js вам не нужен '-e json, raml' :). Вам вообще не нужен параметр '-e'. nodemon будет смотреть файлы .js по умолчанию. –

2

Если вам необходимо пройти аргументы:

forever start -c "nodemon --harmony" app.js --exitcrash 
11

Существует запись о нем в nodemon FAQ:

Если вы используете nodemon с forever (возможно, в производственной среде), вы можете объединить их вместе. Таким образом, если сбой сценария, навсегда перезапустит скрипт, а если есть файлы изменений, nodemon перезапустит ваш скрипт. Более подробно см. issue 30.

Для достижения этой цели необходимо добавить следующее по вызову forever:

  • Используйте навсегда это -c nodemon вариант сказать навсегда, чтобы запустить nodemon вместо node.
  • Включите флаг nodemon --exitcrash, чтобы обеспечить выход nodemon, если сценарий аварийно завершает работу (или неожиданно выходит).
  • Сообщите нам навсегда SIGTERM вместо SIGKILL при запросе остановки nodemon. Это гарантирует, что nodemon может полностью остановить наблюдаемый узел .
  • Необязательно добавьте параметр --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 и процесс узла он был мониторинг.

Обратите внимание, что я не бы рекомендовал использовать nodemon в производственной среде - но это потому, что я не хотел бы его перезапустить без моего явной инструкции.