【问题标题】:Node.js application crashing on HerokuNode.js 应用程序在 Heroku 上崩溃
【发布时间】:2019-05-15 14:57:44
【问题描述】:

我有一个使用 Twitter API 开发的 Nodejs 应用程序。当托管在 Heroku 上时,它会出现以下错误:

2018-12-14T10:00:03.678180+00:00 heroku[web.1]: 错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT
2018-12-14T10:00:03.678256+00:00 heroku[web.1]:使用 SIGKILL 停止进程
2018-12-14T10:00:03.739029+00:00 heroku[web.1]:进程以状态 137 退出

在搜索时,我遇到了这些 StackOverflow 问题 q1 q2 但他们都使用 ExpressJS 并监听固定端口而不是 Heroku 提供的端口,而我的应用程序不是使用 ExpressJS 所以,我不明白问题出在哪里。我还使用heroku local 在本地运行该应用程序,它工作正常。这篇 Heroku 文章讨论了该错误,但我无法将其与我的应用程序 article 联系起来。
谁能解释这个错误并提出可能的解决方案?

我的代码code

【问题讨论】:

  • 如果您提供的代码是唯一的代码,我没有看到您启动服务器并监听端口?
  • @MaviDomates 这是唯一的代码。我必须使用 Express 来监听端口吗?
  • 看我的回答。在您的本地机器中,代码会从头到尾执行,但在网络服务器中,您必须监听端口。
  • @MaviDomates 您的解决方案将不起作用,因为函数内部的代码作为 createServer 中的参数传递只会在对应用程序发出 HTTP 请求时运行,而在我的应用程序中没有这样的 HTTP 请求正在制作中。而不是以工作人员的身份运行应用程序,而是完美地运行应用程序。

标签: node.js api heroku twitter


【解决方案1】:

如果您不使用 ExpressJS(您不必这样做 - 它只是一个让事情变得更容易的网络服务器),您应该使用 Node 的常规 http 服务器。

请参阅下面的代码,取自 here - 稍作修改。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
}).listen(process.env.PORT || 8080);

【讨论】:

    【解决方案2】:

    Heroku 检查作为 web 应用程序(在 Procfile 中定义或默认情况下)运行的应用程序是否有 HTTP 请求,如果它找不到任何传入的 HTTP请求然后它会抛出无法绑定到端口错误。对于像这个 Twitter 应用这样打算在后台运行的应用,通过在 Procfile 中定义一个 worker 来将应用作为 worker 运行.
    有关创建 Procfile 的更多信息,请访问 procfile。要了解有关 webworker 的更多信息,请访问 link1 link2

    【讨论】:

      猜你喜欢
      • 2017-10-23
      • 2015-12-01
      • 1970-01-01
      • 2012-01-28
      • 2018-07-09
      • 2015-03-16
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      相关资源
      最近更新 更多