我在Heroku上有一个Express应用程序。在本地它运行得很好,但在Heroku上不断崩溃。每次我去它都会得到“应用程序错误”#39;页。
我仔细检查了所有环境变量,看起来没问题。
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
...
但是当我打开我的应用程序时,我得到了同样的应用程序错误'页面和以前一样。
' heroku restart'没有帮助。它每次都会再次崩溃。
我的本地环境和Heroku之间的唯一区别(据我所知至少...)是本地我有一个文件,我从中读取RSA私钥,而在Heroku上,这个键从环境中读取。
编辑:根据要求,这是我的Procfile:
web: npm run start
有什么想法吗?
答案 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如何运行您的应用程序,并应该为您提供有关正在发生的事情的信息。