Heroku Node.js 错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT

Posted

技术标签:

【中文标题】Heroku Node.js 错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT【英文标题】:Heroku Node.js Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 【发布时间】:2015-09-14 13:12:32 【问题描述】:

我找到了十几种 Express 驱动应用程序的解决方案,它们设置了监听端口。 但是我有一个不使用 Express 的应用程序,实际上并没有听任何东西。 在它成功运行 60 秒后,我收到一条 Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 消息。 我怎样才能绕过它?谢谢。

【问题讨论】:

【参考方案1】:

经过大量谷歌搜索后,我决定npm install express 并添加

var express = require('express');
var app     = express();

app.set('port', (process.env.PORT || 5000));

//For avoidong Heroku $PORT error
app.get('/', function(request, response) 
    var result = 'App is running'
    response.send(result);
).listen(app.get('port'), function() 
    console.log('App is running, server is listening on port ', app.get('port'));
);

这修复了错误,即使我不喜欢添加 express 只是为了避免一个错误。如果有人找到更好的解决方案,请告诉我。

【讨论】:

我不确定这里最好的解决方案是什么,但我知道的一件事(确实有效)是使用 Node.js 内置模块 http 而不是需要 express 模块。 var http = require('http'); http.createServer(function (req, res) res.writeHead(200, 'Content-Type': 'text/plain'); res.send('it is running\n'); ).listen(process.env.PORT || 5000); 查看下面关于更改您的 procfile 和通过@pille 缩放您的测功机的答案。它比这个答案要好得多,因为它不是一种解决方法,而是正确的方法。【参考方案2】:

如果您的应用程序不监听任何端口,那么您应该在 Procfile 中使用另一种类型的应用程序,我的意思是在 Procfile 中您有:

web: node app.js

替换为:

worker: node app.js

“web”类型的应用程序意味着您的应用程序必须监听某个端口

【讨论】:

看起来,Heroku 似乎忽略了 Procfile 中的设置。 @Pille,你安装node-foreman了吗? 在我的例子中是worker: npm start,但想法保持不变。成功了,非常感谢!【参考方案3】:

另一种方法是使用以下命令将 dyno 从 web(标准设置,无论 Procfile 中的设置如何)更改为 worker:

heroku ps:scale web=0
heroku ps:scale worker=1

有时 Heroku 会忽略 Procfile 中的设置。

【讨论】:

第二个命令对我来说失败了。我必须先在我的 Procfile 中设置worker: npm start 这对我有用,直到我删除了 heroku ps:scale web=0 行,这才开始,谢谢!【参考方案4】:

我也有同样的问题:

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

我尝试了很多东西。

以下不使用express的作品:

http.createServer(onRequest).listen(process.env.PORT || 6000)

【讨论】:

我需要在哪里设置该行? 我也有同样的问题,但是我使用的是 AdonisJS,我无法编辑这一行...【参考方案5】:

我也遇到了同样的问题: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

在我的电脑 Windows 10 Visual Studio 代码中进行流畅的工作

app.listen(process.env.PORT || 8080);

还在package.json中添加了这三行

"worker": "node index.js", "start": "node index.js" "test": "node test.js"

【讨论】:

【参考方案6】:

这条评论解决了我的问题:https://***.com/a/67787556/8684435

问题是你定义端口的方式,它总是在 3001 上运行,这在 Heroku 上是不可能的,你需要绑定 $PORT 环境变量。 更改您的代码以检查 process.env.PORT 定义的第一个 fi(它将在 Heroku 上,但在您的本地开发环境中,它将默认为 3001)

app.listen(process.env.PORT || 3001, '0.0.0.0', () => 
  console.log("Server is running.");
);

【讨论】:

以上是关于Heroku Node.js 错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT的主要内容,如果未能解决你的问题,请参考以下文章

Heroku Node.js 错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT

Python heroku错误H20 App启动超时,R10启动超时

部署 Node.js 应用程序时出现 Heroku 错误

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

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

Heroku discord bot 托管错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT