Переменные среды не загружаются в process.env в Nodejs - PullRequest
1 голос
/ 29 марта 2019

Я создаю API-интерфейс nodejs и настроил пакет dotenv как зависимость dev для загрузки переменных в process.env на локальных машинах разработчика.

Обратите внимание, что при входе в систему я использую sudo -i, чтобы работать как root.

Мое намерение состоит в том, чтобы во время развертывания переменные среды были установлены на моем хосте Ubuntu в /etc/environment, загружены непосредственно в процесс, а затем приложение просто запустилось бы для этой конфигурации.

Для этого у меня есть строка в начале server.js:

if(process.env.NODE_ENV === 'development') {
    logger.info("Loading dotenv for development environment")
    require('dotenv').config();
}

И разработчикам будет предложено добавить переменную среды в их систему для NODE_ENV.

Теперь, в моем экземпляре Ubuntu EC2 я настроил /etc/environment, чтобы иметь переменные окружения, которые я хочу (обратите внимание, что здесь NODE_ENV 'dev' просто для того, чтобы избежать запуска dotenv):

PORT=MYPORT
NODE_ENV=dev
APP_SECRET_KEY='MYSECRET'
APP_DATABASE_LOGIN=MYLOGIN
APP_DATABASE_PASSWORD='MYPASS'
APP_DATABASE_HOST=MYHOST
APP_DATABASE_NAME=MYDB
APP_DATABASE_PORT=MYDBPORT

И когда я перезагружаюсь и запускаю printenv, они все заполняются для файла.

У меня есть настройка pm2 для запуска моего приложения напрямую из server.js без какой-либо дополнительной настройки, потому что, насколько я понимаю, process.env заполняется автоматически из переменных среды.

Однако, когда я записываю значения из файла process.env, я просто получаю нулевое значение для всего:

logger.info({
    connectionConfig: {
        host: process.env.APP_DATABASE_HOST
        , login: process.env.APP_DATABASE_LOGIN
        , port: process.env.APP_DATABASE_PORT
        , databaseName: process.env.APP_DATABASE_NAME
    }
});

Что-то не так с конфигурацией как есть?

Примечание. Согласно приведенному ниже ответу, я по ошибке установил переменные окружения ПОСЛЕ начала работы pm2, и поэтому в кэшировании pm2 их не было

1 Ответ

3 голосов
/ 29 марта 2019

Проблема в том, что pm2 кэширует переменные среды.

Вы должны сделать:

# all apps
pm2 restart all --update-env
# specific app
pm2 restart {pid} --update-env

Если по какой-то причине это не работает, документированный способ:

pm2 reload ecosystem.json --update-env

Вы можете прочитать больше в здесь :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...