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

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


person Community    schedule 03.02.2012    source источник


Ответы (6)


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

В .env:

WEB=node app.js

В dev.env:

WEB=supervisor app.js

В вашем Procfile:

web: $WEB

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

foreman start -e dev.env
person John David Anderson    schedule 05.04.2012
comment
У меня это не сработало на Heroku - файл .env никогда не загружался. Вместо этого сделал отдельный Procfile: stackoverflow.com/questions/10560241/ - person Peter Ehrlich; 15.09.2012

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

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

  1. гем установить повторно
  2. повторный запуск бригадира

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

person Igor Bobriakov    schedule 29.03.2012
comment
Не будет ли это медленным, полностью перезапускать все в procfile при каждом изменении файла? - person Peter Ehrlich; 15.09.2012
comment
В настоящее время я использую для этого supervisor, перезапускать приложение для каждого файла не так уж и сложно. Обновить. Это очень удобно. - person Shane Stillwell; 05.12.2012

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

nodemon --exec "foreman start"
person abel leroyer    schedule 12.05.2015
comment
Я попробовал это, но он застрял на чистом выходе [nodemon] - ожидание изменений перед перезапуском, сервер не запускается снова - person Bruno Lemos; 14.03.2017

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

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

npm install -g supervisor

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

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

person Pendlepants    schedule 08.02.2012

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

person Brade    schedule 14.11.2013

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

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

NODECMD=node-dev

Ваш профайл:

web: $NODECMD app/server.js

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

foreman start -e dev.env -p 9786

И в вашей рабочей среде (heroku) установите переменную среды:

NODECMD=node
person ncabral    schedule 28.10.2014