Node.js 在Heroku上使用AdonisJS部署API时出现错误R10

Node.js 在Heroku上使用AdonisJS部署API时出现错误R10,node.js,heroku,adonis.js,Node.js,Heroku,Adonis.js,以下是错误: 错误R10(启动超时)->Web进程在启动后60秒内绑定到$PORT失败 通过分析日志,我注意到每次我在Heroku上“运行”应用程序时,它都会指向不同的端口 我已经遇到了很多关于如何解决这个问题的例子,但是使用Express而不是显式使用AdonisJS(我发现这非常有限) 我遇到的另一个问题是应用程序对域的使用,应该与Heroku提供的或localhost(127.0.0.1)相同吗 我的日志: 2019-03-28T12:54:19.688098+00:00 app[web.

以下是错误:

错误R10(启动超时)->Web进程在启动后60秒内绑定到$PORT失败

通过分析日志,我注意到每次我在Heroku上“运行”应用程序时,它都会指向不同的端口

我已经遇到了很多关于如何解决这个问题的例子,但是使用Express而不是显式使用AdonisJS(我发现这非常有限)

我遇到的另一个问题是应用程序对域的使用,应该与Heroku提供的或localhost(127.0.0.1)相同吗

我的日志:

2019-03-28T12:54:19.688098+00:00 app[web.1]: info: serving app on http://127.0.0.1:48470
2019-03-28T12:55:17.075091+00:00 heroku[web.1]: State changed from starting to crashed
2019-03-28T12:55:17.081028+00:00 heroku[web.1]: State changed from crashed to starting
2019-03-28T12:55:16.883066+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2019-03-28T12:55:16.883174+00:00 heroku[web.1]: Stopping process with SIGKILL
2019-03-28T12:55:17.056876+00:00 heroku[web.1]: Process exited with status 137
2019-03-28T12:55:20.176409+00:00 heroku[web.1]: Starting process with command `ENV_SILENT=true npm start`
2019-03-28T12:55:22.553527+00:00 app[web.1]: 
2019-03-28T12:55:22.553548+00:00 app[web.1]: > adonis-api-app@4.1.0 start /app
2019-03-28T12:55:22.553551+00:00 app[web.1]: > node server.js
2019-03-28T12:55:22.553552+00:00 app[web.1]: 
2019-03-28T12:55:23.598805+00:00 app[web.1]: info: serving app on http://127.0.0.1:37943
2019-03-28T12:56:20.763929+00:00 heroku[web.1]: State changed from starting to crashed
2019-03-28T12:56:20.660053+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2019-03-28T12:56:20.660202+00:00 heroku[web.1]: Stopping process with SIGKILL
2019-03-28T12:56:20.747895+00:00 heroku[web.1]: Process exited with status 137
2019-03-28T12:56:23.940320+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=***** protocol=https
2019-03-28T13:21:40.085858+00:00 heroku[web.1]: State changed from crashed to starting
2019-03-28T13:21:43.920685+00:00 heroku[web.1]: Starting process with command `ENV_SILENT=true npm start`
2019-03-28T13:21:46.419408+00:00 app[web.1]: 
2019-03-28T13:21:46.419429+00:00 app[web.1]: > adonis-api-app@4.1.0 start /app
2019-03-28T13:21:46.419431+00:00 app[web.1]: > node server.js
2019-03-28T13:21:46.419433+00:00 app[web.1]: 
2019-03-28T13:21:47.899057+00:00 app[web.1]: info: serving app on http://127.0.0.1:51104
我的
.env
文件:

HOST=127.0.0.1
PORT=8080
NODE_ENV=development
APP_NAME=AdonisJs
APP_URL=https://${HOST}:${PORT}
APP_KEY=*******

如何防止端口被更改?

这里发生了一些事情

来自环境的配置 有两个主要好处:

  • 它使配置环境特定,例如,您可以在开发中使用不同于生产中使用的数据库、邮件服务器等
  • 它允许您将敏感值(如API密钥和密码)保留在代码库之外
.env
文件包含在存储库中会抵消这两个好处。在开发中使用一个是很好的,它可以是设置环境变量的一种方便方式,但不应该将它提交到您的存储库中或在Heroku中使用

希罗库。您可以在web UI中或通过命令行上的
heroku:config
设置变量。这是您的环境变量应该在生产中使用的地方

我强烈建议您使用从存储库中删除
.env
文件

git rm --cached .env
将其添加到
.gitignore
,并改用Heroku基于本机环境的配置。您还应该使该文件中包含的任何API密钥或密码无效,并生成新的密钥或密码

值得一提的是,AdonisJS文档:

.env
文件不应提交给您的源代码管理或与其他人共享

不同端口 :

在Heroku上,应用程序是完全独立的,不依赖运行时将web服务器注入执行环境来创建面向web的服务。每个web进程只绑定到一个端口,并侦听来自该端口的请求。Heroku将指定为
端口
环境变量

Heroku通过
port
环境变量告诉您要绑定到哪个端口,您必须使用它。但这不是外部可见的端口;标准HTTP端口将自动路由到应用程序

IP地址
应用程序应该侦听所有IP地址。如果您使用的是Express,我认为这意味着您在
.listen()
调用中没有提供IP地址。您应该只在那里提供端口,并且该端口应该来自
port
环境变量。

您的
.env
文件应该只在开发中使用。这基本上是为了方便填充环境变量,但是。它是否已提交到您的存储库?该.env文件位于我的存储库中