【问题标题】:Scala app gets "App boot timeout" on HerokuScala 应用程序在 Heroku 上获得“应用程序启动超时”
【发布时间】:2015-01-20 19:14:57
【问题描述】:

我有一个想要部署到 Heroku 的 Scala 应用程序(带有 Jetty 的 http4s)。我按照https://devcenter.heroku.com/articles/getting-started-with-scala 上的说明进行操作,并将其作为我的 Procfile:

网络:目标/通用/舞台/bin/myappname

我使用 sbt 和 sbt-native-packager 构建应用程序并运行 sbt compile stage。在我的本地机器上,当我运行 target/universal/stage/bin/myappname 时,我可以使用以下日志成功启动 Jetty 服务器:

从 4000 端口开始
[main] INFO org.eclipse.jetty.util.log - 记录已初始化 @285ms
[主要] INFO org.eclipse.jetty.server.Server - jetty-9.2.3.v20140905
[main] INFO org.eclipse.jetty.server.handler.ContextHandler - 开始 o.e.j.s.ServletContextHandler@45c5082a{/,null,AVAILABLE}
[main] INFO org.eclipse.jetty.server.ServerConnector - 已启动 ServerConnector@30ec6243{HTTP/1.1}{127.0.0.1:4000}
[main] INFO org.eclipse.jetty.server.Server - 开始 @421ms

在 Heroku 上,我还获得了 Jetty 服务器启动的日志,但之后还有一个额外的超时行:

2014-11-22T19:27:53.648838+00:00 heroku[web.1]:使用命令“target/universal/stage/bin/myappname”启动进程
2014-11-22T19:27:54.967288+00:00 app[web.1]: 拿起 JAVA_TOOL_OPTIONS: -Xmx384m -Djava.rmi.server.useCodebaseOnly=true
2014-11-22T19:27:55.495116+00:00 app[web.1]:从端口 36115 开始
2014-11-22T19:27:55.761411+00:00 app[web.1]:[main] INFO org.eclipse.jetty.util.log - 记录初始化@645ms
2014-11-22T19:27:56.032766+00:00 app[web.1]:[main] INFO org.eclipse.jetty.server.handler.ContextHandler - 启动 oejsServletContextHandler@397f0e73{/,null,AVAILABLE}
2014-11-22T19:27:55.962916+00:00 app[web.1]:[main] INFO org.eclipse.jetty.server.Server-jetty-9.2.3.v20140905
2014-11-22T19:27:56.055280+00:00 app[web.1]:[main] INFO org.eclipse.jetty.server.Server - 开始@967ms
2014-11-22T19:27:56.055064+00:00 app[web.1]:[main] INFO org.eclipse.jetty.server.ServerConnector - 启动 ServerConnector@1df3b191{HTTP/1.1}{127.0.0.1:36115}
2014-11-22T19:28:07.147193+00:00 heroku[路由器]: at=error code=H20 desc="App boot timeout" method=GET path="/" host=myappname.herokuapp.com request_id=c05b5bf6- 6268-4c37-8525-4e58c1bda496 fwd="24.4.136.119" dyno= connect= service= status=503 bytes=

我的应用启动但 Heroku 提示应用启动超时的原因是什么?提前致谢。

【问题讨论】:

  • 对我来说,将 BlazeBuilder.bindHttp(Properties.envOrElse("PORT", "8080").toInt) 更改为 BlazeBuilder.bindHttp(Properties.envOrElse("PORT", "8080").toInt, "0.0.0.0") 解决了这个问题(我使用的是 Blaze 后端而不是 Jetty,但它应该不会产生影响)。

标签: scala heroku timeout


【解决方案1】:

在这里寻找答案involvingerror code,我有以下建议:

  • 确保您可以使用foreman start 在本地启动您的应用程序
  • 了解如何在不同的端口上启动 https/Jetty 应用程序(我没用过)
    • (例如,我将使用适用于 Play2 的方法,即设置 http.port
  • 编辑您的 Procfile,附加一个使用 $PORT 的 http.port 参数,如下所示:

web: target/universal/stage/bin/myappname -Dhttp.port=$PORT

我怀疑如果没有这个端口设置参数,您的 web 应用程序将在与 Heroku 正在检查的端口不同的端口上启动,因此会超时。

【讨论】:

  • 我可以使用 foreman start 在本地启动我的应用程序。我的代码在环境变量 PORT 定义的端口上启动应用程序:val port = Properties.envOrElse("PORT", "8080").toInt。我还将-Dhttp.port=$PORT 添加到 Procfile 中,但没有成功。
  • 您的应用需要多长时间才能在本地启动?在您的 Heroku 日志中,看起来一切都很好,直到它挂起等待“org.eclipse.jetty.server.Server - Started”。知道您的应用程序中的某些内容是否会导致此问题?
【解决方案2】:

您可能在 localhost 而不是 0.0.0.0 上收听

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2021-08-27
    • 1970-01-01
    • 2021-03-10
    • 2015-02-14
    • 2011-09-23
    • 2014-11-02
    相关资源
    最近更新 更多