Веб-приложение, которое я пишу на JavaScript, используя node.js. Я использую Foreman, но не хочу вручную перезапускать сервер каждый раз, когда меняю свой код. Могу ли я попросить Формана перезагрузить все веб-приложение перед обработкой HTTP-запроса (т. е. перезапустить процесс node
)?
Могу ли я попросить мастера перезагружать веб-приложение каждый раз, когда делается запрос, чтобы я мог прилично развиваться?
Ответы (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
.env
никогда не загружался. Вместо этого сделал отдельный Procfile: stackoverflow.com/questions/10560241/
- person Peter Ehrlich; 15.09.2012
Вы можете использовать rerun для этой цели.
Для этого вы можете реализовать всего 2 команды:
- гем установить повторно
- повторный запуск бригадира
Затем rerun автоматически перезапустит процесс после любого изменения в ваших файлах.
Если вы используете nodemon, вы можете сделать
nodemon --exec "foreman start"
Проблема не столько в 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 не работает в рабочей среде, оно должно перезагружаться при каждом запросе.
Я чувствую, что комментарий Питера Эрлиха к первоначальному вопросу заслуживает того, чтобы быть ответом сам по себе. Я думаю, что другой Procfile для local/dev определенно является лучшим решением: https://stackoverflow.com/a/10790514/133720 а>
Вам даже не нужно устанавливать ничего нового, если вы используете node-dev.
Ваш файл .env, загруженный из Procfile:
NODECMD=node-dev
Ваш профайл:
web: $NODECMD app/server.js
Ваша команда бригадира
foreman start -e dev.env -p 9786
И в вашей рабочей среде (heroku) установите переменную среды:
NODECMD=node