Node.js PM2不';不要在NodeJS上工作(Heroku)

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

我使用PM2让NodeJS(Express)连续运行。在我的本地计算机上,以下内容在my packages.json中起作用:

"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秒后关闭了服务器连接。不过,谢谢你的帮助。