我正在使用PM2让NodeJS(Express)连续运行。在我的本地计算机上,以下内容适用于我的packages.json:
"scripts": {
"start": "pm2 start ./bin/www"
}
之后,我使用'npm start'来运行我的应用程序。一切正常。
现在我想将我的应用程序部署到Heroku。我添加了一个带有'web:npm start'的Procfile。之后我将packages.json改为:
"scripts": {
"preinstall": "npm install pm2 -g",
"start": "pm2 start ./bin/www"
}
然而,我收到此错误:
2018-02-22T19:51:23.861641+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2018-02-22T19:51:23.862201+00:00 heroku[web.1]: Stopping process with SIGKILL
2018-02-22T19:51:24.007776+00:00 heroku[web.1]: Process exited with status 137
2018-02-22T19:51:24.046849+00:00 heroku[web.1]: State changed from starting to crashed
我已经找到了许多方法来解决这个问题,例如将我的Procfile更改为'worker:node app.js'并运行命令:'$ heroku scale web = 0 worker = 1'。
但我无法找出问题所在。我认为它与'pm2'模块有关,因为当我不使用它时,我的应用程序运行正常。然而,经过一段时间后,它会崩溃。希望有人可以帮助我。
“pm2 show www”显示了这一点:
│ status │ online │
│ name │ www │
│ restarts │ 151 │
│ uptime │ 40s │
│ script path │ /Users/user1/Documents/Weview/app/bin/www │
│ script args │ N/A │
│ error log path │ /Users/user1/.pm2/logs/www-error-1.log │
│ out log path │ /Users/user1/.pm2/logs/www-out-1.log │
│ pid path │ /Users/user1/.pm2/pids/www-1.pid │
│ interpreter │ node │
│ interpreter args │ N/A │
│ script id │ 1 │
│ exec cwd │ /Users/user1/Documents/Weview/app │
│ exec mode │ fork_mode │
│ node.js version │ 8.9.1 │
│ watch & reload │ ✘ │
│ unstable restarts │ 0 │
│ created at │ 2018-02-22T20:22:53.688Z │
└───────────────────┴──────────────────────────────────────────────────────────────┘
Code metrics value
┌─────────────────┬────────┐
│ Loop delay │ 2.86ms │
│ Active requests │ 0 │
│ Active handles │ 4
答案 0 :(得分:0)
使用此
"scripts": {
"start": "PORT=3000 pm2 start ./bin/www"
}
Heroku尝试使用env变量PORT
答案 1 :(得分:0)
tl; dr你不能使用fork
我通过使用“实例”来使用一个dyno:1和“exec_mode”:“cluster”。似乎当使用带有一个dyno的fork时,您无法重用端口,因为您只有一个端口并且在单个线程上运行您的应用程序,因此由于EADDRINUSE,分叉将失败。查看此stackoverflow问题,以全面讨论群集和分叉:Cluster and Fork mode difference in PM2
答案 2 :(得分:0)
首先,您必须安装pm2。 我读了这些docs
点击您的package.json
“脚本”:{ “ preinstall”:“ npm install pm2 -g”, “ start”:“ pm2-runtime app.js -i max” }