Heroku Node应用程序不断崩溃

时间:2017-04-16 23:18:26

标签: node.js express heroku pm2

我在Heroku上有一个Express应用程序。在本地它运行得很好,但在Heroku上不断崩溃。每次我去它都会得到“应用程序错误”#39;页。

application error page

我仔细检查了所有环境变量,看起来没问题。

Heroku日志并不能提供很多帮助:

2017-04-16T23:02:49.001768+00:00 heroku[web.1]: State changed from crashed 
to starting
2017-04-16T23:02:52.072906+00:00 heroku[web.1]: Starting process with 
command `npm run start`
2017-04-16T23:02:56.042611+00:00 app[web.1]: 
2017-04-16T23:02:56.042628+00:00 app[web.1]: > my-app@0.0.1 start /app
2017-04-16T23:02:56.042629+00:00 app[web.1]: > node bin/app
2017-04-16T23:02:56.042630+00:00 app[web.1]: 
2017-04-16T23:02:57.200912+00:00 heroku[web.1]: State changed from starting 
to crashed
2017-04-16T23:02:57.201454+00:00 heroku[web.1]: State changed from crashed 
to starting
2017-04-16T23:02:57.192198+00:00 heroku[web.1]: Process exited with status 0
2017-04-16T23:03:00.981528+00:00 heroku[web.1]: Starting process with 
command `npm run start`
2017-04-16T23:03:04.312475+00:00 app[web.1]: 
2017-04-16T23:03:04.312489+00:00 app[web.1]: > my-app@0.0.1 start /app
2017-04-16T23:03:04.312490+00:00 app[web.1]: > node bin/app
2017-04-16T23:03:04.312491+00:00 app[web.1]: 
2017-04-16T23:03:06.093211+00:00 heroku[web.1]: Process exited with status 0
2017-04-16T23:03:06.112842+00:00 heroku[web.1]: State changed from starting 
to crashed

然后我尝试手动启动应用程序:

$ heroku run bash
...
$ npm run start

我没有错误。我使用了pm2进程管理器,所以我检查了它是否正在运行,看起来好像是:

$ node_modules/.bin/pm2 list
...

pm2 output

但是当我打开我的应用程序时,我得到了同样的应用程序错误'页面和以前一样。

' heroku restart'没有帮助。它每次都会再次崩溃。

我的本​​地环境和Heroku之间的唯一区别(据我所知至少...)是本地我有一个文件,我从中读取RSA私钥,而在Heroku上,这个键从环境中读取。

编辑:根据要求,这是我的Procfile:

web: npm run start

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您的应用程序需要开始监听环境中定义的端口。例如,如果您有一个expressjs应用,它应该看起来像这样:

const express = require('express')
const app = express()
const port = process.env.PORT || 3000

app.get('/', (req, res) => res.send("Hello world"))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

如果该应用程序未绑定到正确的端口,则heroku将认为该应用程序不健康,并将终止该程序。

您需要在日志中看到此行,这表明heroku认为该应用程序健康:

State changed from starting to up

请记住,此端口是web进程的特殊要求。您应用中的其他进程没有这样的要求。

答案 1 :(得分:0)

尝试两件事: 更改你的procfile:

web: node start.js

然后确保您的网络通过扩展来处理它:

heroku ps:scale web=1

在终端窗口中的计算机上,在项目中运行此命令:

heroku local web

它模拟了Heroku如何运行您的应用程序,并应该为您提供有关正在发生的事情的信息。