Проблема с PM2 и DotEnv не работает на сервере Ubuntu - PullRequest
0 голосов
/ 16 июня 2019

Я знаю, что есть ответы на этот вопрос, но я не хочу создавать еще один файл конфигурации, загружать всю конфигурацию и запускать процесс pm2.

Project Structure
-----------------
.env
index.js -> server is listening in this file
routes/
models/
middleware/
startup/
package.json
...

Внутри package.json

{
  "name": "eventbooking",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node -r dotenv/config index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@hapi/joi": "^15.0.3",
    "bcryptjs": "^2.4.3",
    "compression": "^1.7.4",
    "dotenv": "^8.0.0",
    "express": "^4.17.1",
    "express-async-errors": "^3.1.1",
    "helmet": "^3.18.0",
    "joi-objectid": "^2.0.0",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.5.14",
    "winston": "^3.2.1"
  }
}

Как видно из моего файла package.json , я загружаю узел -r dotenv / config index.js файл из scripts> start

Когда я запускаю локально со следующей командой

npm start

Проект работает полностью нормально.

Теперь я развернул проект на сервере, и там, если я вручную запустил

npm start

, то работает нормально.

Когда я устанавливаю PM2 на Ubuntu Server в производственном режиме и выполняю следующие шаги, то он не работает.

Шаг 1. Режим внутри папки проекта в корневом каталоге и

pm2 start index.js --name "Event Booking"

Затем получаем следующее

 App name │ id │ version │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem      │ user │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼──────────┼──────┼──────────┤ 

│ index    │ 0  │ 1.0.0   │ fork │ 29897 │ online │ 0       │ 0s     │ 0%  │ 3.7 MB   │ root │ disabled 

Но проект не работает.В чем проблема.

Даже когда я запускаю следующее как

pm2 start -r dotenv/config index.js --name 'Event Booking'

Затем получаю ошибку как

Ошибка: неизвестный параметр `-r '

Любое другое решение для запуска скрипта с pm2

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Вы должны следовать примечаниям из моего ответа здесь: https://stackoverflow.com/a/55853036/2208713. Я вижу из вашего вопроса выше, что вы смешиваете синтаксис pm2 с npm. Если вы возьмете образец из моего ответа, вы сможете достаточно легко это сделать, но следуйте моим инструкциям!

0 голосов
/ 17 июня 2019

Существует 2 способа достижения решения.

Решение 1:

При запуске процесса pm2 запускайте с - node-args следующим образом

pm2 start index.js --name eventbooking --node-args="-r dotenv/config"

Вы можете передавать несколько аргументов с разделенным пробелом, кроме dotenv / config Мне не нужно много, так как я загружаю все из dotenv *Пакет 1015 *, но показан только для демонстрации следующим образом

pm2 start index.js --name eventbooking --node-args="-r dotenv/config --production --port=1337"

Решение 2:

В качестве альтернативы, вы можете инициализировать свой проект с помощью pm2 init это создаст файл конфигурации pm2 с именем ecosystem.config.js

Для меня по некоторым причинам args в app не былоработать, поэтому мне пришлось добавить node_args снова следующим образом

{
  "apps": [
    {
      "name": "eventbooking",
      "script": "./index.js",
      "node_args": ["-r dotenv/config"]
    }
  ]
}

На самом деле, я придерживаюсь решение 1 для более чистого и минимального кода кода.

В случае, если кому-то интересны опции PM2, перейдите по следующей ссылке

http://pm2.keymetrics.io/docs/usage/quick-start/

...