Node.js PM2不';不要在NodeJS上工作(Heroku)
我使用PM2让NodeJS(Express)连续运行。在我的本地计算机上,以下内容在my packages.json中起作用:Node.js PM2不';不要在NodeJS上工作(Heroku),node.js,express,heroku,pm2,Node.js,Express,Heroku,Pm2,我使用PM2让NodeJS(Express)连续运行。在我的本地计算机上,以下内容在my packages.json中起作用: "scripts": { "start": "pm2 start ./bin/www" } 之后,我使用“npm开始”运行我的应用程序。这一切都很好 现在我想将我的应用程序部署到Heroku。我添加了一个带有“web:npm start”的Procfile。之后,我将我的packages.json稍微更改为: "scripts": { "preinst
"scripts": {
"start": "pm2 start ./bin/www"
}
之后,我使用“npm开始”运行我的应用程序。这一切都很好
现在我想将我的应用程序部署到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显示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
用这个
"scripts": {
"start": "PORT=3000 pm2 start ./bin/www"
}
Heroku试图用env变量
PORT
tl绑定节点应用程序;你不能用叉子吗
通过使用“实例”:1和“执行模式”:“集群”,我让它与一个dyno一起工作。似乎当使用带有一个dyno的fork时,您无法重用该端口,因为您只有一个端口,并且在单个线程上运行应用程序,因此fork将由于使用而失败。查看这个stackoverflow问题,了解集群和分叉的详细讨论:首先,您必须安装pm2。 我读了这些 cek your package.json “脚本”:{ “预安装”:“npm安装pm2-g”, “开始”:“pm2 runtime app.js-i max”
},我试过了,请在更新后的帖子中查看我的错误。这个错误很模糊,我真的不知道哪里出了问题。感谢您的帮助。bin/www似乎不是一个健康的应用程序。请尝试
pm2显示www
并查看结果“脚本路径”指向本地路径(/Users/…)。这是正确的吗?在帖子中,您会看到更新。请删除/并简单地使用bin/www,假设package.json所在的任何位置都有并行的bin目录。如果没有解决,发布/Users/user1/.pm2/logs/www-error-1.logI的输出通过完全不使用pm2解决了问题。我的节点mysql代码中有一个bug,它在60秒后关闭了服务器连接。不过,谢谢你的帮助。