PM2 和 DotEnv 在 Ubuntu 服务器上无法运行的问题
我知道这个问题有答案,但我不想再创建一个配置文件并在那里加载所有配置并运行 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 文件中看到的那样,我正在从 scripts > 加载 node -r dotenv/config index.js 文件。 npm start
当我在本地使用以下命令运行时
npm start
项目运行完全正常。
现在我已将项目部署到服务器,如果我手动运行
npm start
然后运行正常。
当我在生产环境中在 Ubuntu Server 中安装 PM2 并执行以下步骤时,它不起作用。
步骤 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 运行脚本的解决方案吗?
有两种方法可以实现解决方案。
解决方案 1:
运行 pm2 进程时,使用 --node-args 运行,如下所示
pm2 start index.js --name eventbooking --node-args="-r dotenv/config"
您可以传递多个用空格分隔的参数,除了 dotenv/config ,我不需要太多,因为我正在从 dotenv 包加载所有内容,但仅显示演示,如下所示
pm2 start index.js --name eventbooking --node-args="-r dotenv/config --production --port=1337"
解决方案 2:
或者,您可以使用 pm2 init 初始化您的项目,这将创建名为 ecosystem.config.js
对于我来说,由于某些原因, app 下的 args 不起作用,所以我不得不添加 node_args 再次如下
{
"apps": [
{
"name": "eventbooking",
"script": "./index.js",
"node_args": ["-r dotenv/config"]
}
]
}
实际上,我坚持使用 解决方案 1 以获得更清洁和最少的代码模式。
如果有人对 PM2 选项感兴趣,请访问以下链接
您需要遵循我在此处的回答中的说明: https://stackoverflow.com/a/55853036/2208713 。从上面的问题中我可以看出,您将 pm2 语法与 npm 混淆了。如果您采用我回答中的模式,您将能够轻松地完成这项工作 - 但请仔细遵循我的说明!