【发布时间】: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,但它应该不会产生影响)。