Как я могу проверить, установлен ли мой узел приложения pm2 ENV?
поэтому я только что развернул сайт с узлом и pm2 в первый раз, и я возвращаюсь и делаю некоторую оптимизацию и читаю лучшие практики и т. д.
Я читал, что вы можете получить много пользы, установив NODE_ENV=production
.
Я нашел это в документах pm2:
[process.json]
"env_production" : {
"NODE_ENV": "production"
}
...
$ pm2 start process.json --env production
Итак, я сделал это, но я понятия не имею, работает ли это. Пытаясь выяснить, как это проверить, я научился пробовать:
$ node
> process.env.NODE_ENV
> undefined
Итак, это плохой знак.. но, с моим ограниченным понимание того, как работает низкоуровневый материал, я могу предположить, что, возможно, pm2 запускает каждое приложение как отдельный процесс узла? Так что, возможно, я не в правильном процессе, когда пытаюсь это проверить.
кроме того, я не знаю, должен ли я сделать новый ~/.pm2 / dump.pm2 файл, потому что, возможно, всякий раз, когда это может переопределять параметры, которые я установил? (потому что я использовал pm2 startup
).
Как проверить, установлен ли NODE_ENV моего приложения pm2?
4 ответов
Edit 2:
чтобы более четко ответить на вопрос в заголовке:
в вашем скрипте для меня мое Экспресс-приложение app.js
файл, вы можете использовать process.env.NODE_ENV
получить текущее значение NODE_ENV
и выйдите из системы, если хотите.
еще лучший способ-использовать модуль показателей процесса PM2, он же pmx
.
yarn add pmx
или
npm install pmx --save
затем
const Probe = require('pmx').probe()
Probe.metric({
name : 'NODE_ENV',
value : function() {
return process.env.NODE_ENV
}
})
теперь он будет отображаться в вызовах pm2 show <appname>
(внизу) или в pm2 monit (внизу слева).
Edit 1:
похоже, что все, что на самом деле необходимо, это убить и перезапустить процесс, чтобы изменить среду.
$ pm2 kill && pm2 start pm2.json --env production
следующего недостаточно:
pm2 restart pm2.json --env production
вы должны убить процесс
оригинальный ответ:
Итак, я заставил его работать. Я думаю, что это связано с тем, что среда сохраняется в сценарии init потому что после вытирания всего и начала все сначала сработало.
вот как я это сделал.
$ pm2 stop all && pm2 kill && rm -R ~/.pm2 && sudo rm -R /root/.pm2
$ pm2 startup
какие выходные следующую команду для меня, чтобы скопировать-вставить:
$ sudo su -c "env PATH=$PATH:/usr/bin pm2 startup linux -u myusername --hp /home/myusername"
и затем:
/srv/http/project $ pm2 start pm2.json --env production
pm2.json
моя файл config.
а потом я проверил журналы и, конечно же, он говорит production
вместо undefined
.
Итак, подводя итог, я не думаю, что у меня было что-то не так, но я уже создал init скрипт и сохранил конфигурацию, и по какой-то причине он не использовал новую среду.
ваш процесс.файл json является неполным. Попробуйте использовать что-то вроде этого:
[process.json]
{
"name" : "MyApp",
"script" : "myapp.js",
"env_production" : {
"NODE_ENV": "production"
}
}
затем добавьте вход в свой код, желательно где-нибудь при запуске:
console.log("NODE_ENV : ", process.env.NODE_ENV);
Теперь запустите приложение:
pm2 start process.json --env production
наконец смотреть журналы приложений:
pm2 logs MyApp
это должно помочь.
может быть в начале вашего сценария сервера вы можете распечатать значение переменной среды, а затем проверить журналы PM2. Используйте следующий код для печати значения переменной среды:
console.log('process.env.NODE_ENV:', process.env.NODE_ENV);
а затем используйте следующий код, чтобы увидеть журналы PM2
ТЧ2 бревна функция app_name
здесь app_name
это ваше имя процесса, как указано в записи в .
начните с npm
добавив это к вашему package.json
:
"scripts": {
"myScript": "NODE_ENV=production pm2 start server.js"
}
затем
npm start myScript
вы можете сделать это напрямую тоже, но это легко управлять, автоматизировать wth crontab
и находится в вашей системе управления версиями...