Могу ли я сказать мастеру перезагружать веб-приложение каждый раз, когда делается запрос, чтобы я мог достойно развиваться? - PullRequest
21 голосов
/ 03 февраля 2012

Веб-приложение, которое я пишу на JavaScript с использованием node.js.Я использую Foreman, но не хочу вручную перезагружать сервер каждый раз, когда меняю код.Могу ли я сказать Foreman перезагрузить все веб-приложение перед обработкой HTTP-запроса (т.е. перезапустить процесс node)?

Ответы [ 6 ]

23 голосов
/ 06 апреля 2012

Вот скорректированная версия решения Pendlepants.Форман ищет файл .env для чтения переменных среды.Вместо того, чтобы добавить обертку, вы можете просто указать мастеру, какую команду он использует для запуска:

В .env:

WEB=node app.js

В dev.env:

WEB=supervisor app.js

В вашем Procfile:

web: $WEB

По умолчанию Foreman будет читать из .env (в Производстве), но в DEV просто запустите это:

foreman start -e dev.env
7 голосов
/ 29 марта 2012

Вы можете использовать rerun для этой цели

Вы можете реализовать для этого всего 2 команды:

  1. gem install rerun
  2. rerunначало мастера

Затем повторный запуск автоматически перезапустит процесс после любого изменения в ваших файлах.

6 голосов
/ 12 мая 2015

Если вы используете nodemon Вы можете сделать

nodemon --exec "foreman start"
3 голосов
/ 08 февраля 2012

Проблема не столько в Foreman, сколько в том, что узел не перезагружает код при новых запросах. Решение состоит в том, чтобы использовать пакет npm, такой как supervisor вместе с оболочкой среды для Foreman.

Сначала установите супервизор:

npm install -g supervisor

Затем напишите скрипт оболочки-оболочки, который может вызывать Форман:

if [ "$NODE_ENV" == "production" ]; then
  node /path/to/app.js
else
  supervisor /path/to/app.js
fi

Установите права доступа скрипта-оболочки к исполняемому файлу, запустив chmod a+x /path/to/wrapper_script.sh

Наконец, обновите мастера, чтобы использовать сценарий оболочки. Так в вашем Procfile:

web: /path/to/wrapper_script.sh

Теперь, когда вы запустили Foreman, а приложение вашего узла не запущено, оно должно перезагрузиться при каждом запросе.

2 голосов
/ 15 ноября 2013

Я чувствую, что комментарий Питера Эрлиха на первоначальный вопрос заслуживает того, чтобы быть самостоятельным ответом. Я думаю, что лучший Procfile для локальной / dev, безусловно, является лучшим решением: https://stackoverflow.com/a/10790514/133720

0 голосов
/ 28 октября 2014

Вам даже не нужно устанавливать что-то новое, если вы используете node-dev.

Ваш файл .env, загруженный из Procfile:

NODECMD=node-dev

Ваш Procfile:

web: $NODECMD app/server.js

Ваша команда бригадира

foreman start -e dev.env -p 9786

И в вашем производственном env (heroku) установите переменную окружения:

NODECMD=node
...