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