我有一个Scala应用程序(http4s with Jetty),我想部署到Heroku。我按照 https://devcenter.heroku.com/articles/getting-started-with-scala 上的说明进行操作,并将其作为我的Procfile:
我使用 sbtWeb:目标/通用/阶段/bin/myappname
和 sbt-native-packager 构建应用程序并运行 sbt compile stage
.在本地计算机上运行target/universal/stage/bin/myappname
时,可以使用以下日志成功启动 Jetty 服务器:
从端口 4000
开始 [主要]INFO org.eclipse.jetty.util.log - 日志记录初始化@285ms
[主要]INFO org.eclipse.jetty.server.Server - jetty-9.2.3.v20140905
[主要]INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@45c5082a{/,null,AVAILABLE}
[主要]INFO org.eclipse.jetty.server.ServerConnector - Started ServerConnector@30ec6243{HTTP/1.1}{127.0.0.1:4000}
[主要]INFO org.eclipse.jetty.server.Server - 已启动@421ms
在 Heroku 上,我还获得了 Jetty 服务器启动的日志,以及之后的额外超时行:
2014-11-22T19:27:53.648838+00:00 heroku[web.1]:使用命令"目标/通用/阶段/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 - 已启动 o.e.j.s.ServletContextHandler@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[router]: 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= 连接= 服务= 状态=503 字节=
我的应用程序启动但 Heroku 说应用程序启动超时的原因是什么?提前谢谢。
您可能正在收听本地主机而不是 0.0.0.0
在这里寻找涉及该错误代码的答案,我有以下建议:
- 确保可以使用
foreman start
在本地启动应用 - 了解如何在其他端口上启动 https/Jetty 应用(我还没有使用过)
- (例如,我将使用适用于 Play2 的方法,即设置
http.port
)
- (例如,我将使用适用于 Play2 的方法,即设置
- 编辑您的
Procfile
,附加一个使用如下$PORT的http.port
参数:
web: target/universal/stage/bin/myappname -Dhttp.port=$PORT
我怀疑如果没有这个端口设置参数,您的 Web 应用程序将在与 Heroku 正在检查的端口不同的端口上启动,因此超时。