这是错误:
错误R10(引导超时)-> Web进程在启动后60秒内未能绑定到$ PORT
分析日志时,我注意到每次在Heroku上“运行”该应用程序时,它都会定向到另一个端口。
我已经遇到了许多解决此问题的示例,但是使用Express而不是显式地使用AdonisJS(我发现它非常有限)。
我遇到的另一个问题是为我的应用程序使用域,该域应该与Heroku提供的域名或本地主机(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=*******
如何防止端口被更改?
答案 0 :(得分:1)
这里发生了一些事情。
configuring your application from the environment有两个主要优点:
在存储库中包含.env
文件会抵消这两个好处。在开发中使用它很好,它可以是设置环境变量的便捷方法,但是不应将其提交到存储库或在Heroku中使用。
Heroku natively supports configuration from the environment。您可以在Web UI中或通过命令行上的heroku:config
来设置变量。这是您的环境变量应在生产环境中使用的地方。
我强烈敦促您使用
从存储库中删除.env
文件
git rm --cached .env
将其添加到您的.gitignore
中,并改用Heroku基于本机环境的配置。您还应该使该文件中包含的所有API密钥或密码无效,并生成新的密钥或密码。
有关其价值,请参阅AdonisJS文档agrees with this approach:
绝对不要将
.env
文件提交给源代码管理或与他人共享。
在Heroku上,应用程序是完全独立的,并且不依赖于将运行时的Web服务器注入执行环境来创建面向Web的服务。每个Web进程仅绑定到一个端口,并侦听该端口上的请求。 Heroku将port to bind to分配为
PORT
环境变量。
Heroku通过PORT
环境变量告诉您要绑定到哪个端口,您必须使用它。但这不是从外部可见的端口。标准的HTTP端口将自动路由到您的应用程序。
您的应用程序应侦听所有IP地址。如果您使用的是Express,我认为这意味着您在.listen()
通话中没有提供IP地址。您只应在此处提供端口,该端口应来自PORT
环境变量。