Веб-приложение, которое я пишу в JavaScript, используя node.js. Я использую Foreman, но я не хочу вручную перезапускать сервер каждый раз, когда я меняю свой код. Могу ли я сообщить Foreman, чтобы перезагрузить все веб-приложение перед обработкой HTTP-запроса (т.е. Перезапустить процесс node
)?
Могу ли я сказать бригадиру, чтобы перезагрузить веб-приложение каждый раз, когда запрос сделан, чтобы я мог развиваться прилично?
Ответ 1
Здесь скорректированная версия решения Pendlepants. Форман ищет файл .env для чтения переменных окружения. Вместо добавления обертки вы можете просто переключить Foreman на команду, которую он использует для запуска:
В .env:
WEB=node app.js
В dev.env:
WEB=supervisor app.js
В вашем файле Procfile:
web: $WEB
По умолчанию Foreman будет читать из .env(в Production), но в DEV просто запустите это:
foreman start -e dev.env
Ответ 2
Вы можете использовать rerun для этой цели
Для этого вы можете реализовать всего 2 команды:
- gem install reerun
- Запуск мастера запуска
Затем перезапуск автоматически перезапустит процесс после любых изменений в ваших файлах.
Ответ 3
Если вы используете nodemon , вы можете сделать
nodemon --exec "foreman start"
Ответ 4
Проблема не в том, что Foreman так сильно, как node не перезагружает код при новых запросах. Решение состоит в том, чтобы использовать пакет npm, например supervisor вместе с оболочкой среды для Foreman.
Сначала установите диспетчер:
npm install -g supervisor
Затем напишите оболочку оболочки script, которую Форман может вызвать:
if [ "$NODE_ENV" == "production" ]; then
node /path/to/app.js
else
supervisor /path/to/app.js
fi
Установите разрешения оболочки script для исполняемого файла, запустив chmod a+x /path/to/wrapper_script.sh
Наконец, обновите мастера, чтобы использовать обертку script. Итак, в Procfile
:
web: /path/to/wrapper_script.sh
Теперь, когда вы запускаете Foreman и ваше приложение node не запускается на производстве, оно должно перезагружаться при каждом запросе.
Ответ 5
Я чувствую, что комментарий Питера Эрлиха по первому вопросу заслуживает того, чтобы быть ответом сам по себе. Я думаю, что другой Procfile для локального /dev определенно является лучшим решением: fooobar.com/questions/246416/...
Ответ 6
Вам даже не нужно устанавливать ничего нового, если вы используете node -dev.
Ваш .env файл, загруженный из файла Procfile:
NODECMD=node-dev
Ваш файл Procfile:
web: $NODECMD app/server.js
Команда вашего мастера
foreman start -e dev.env -p 9786
И в вашем произведении env (heroku) установите переменную среды:
NODECMD=node