2014-11-22 154 views
2

我有一个我想部署到Heroku的Scala应用程序(http4s with Jetty)。我也跟着上https://devcenter.heroku.com/articles/getting-started-with-scala的指示,有这个作为我Procfile:Scala应用程序在Heroku上得到“应用程序启动超时”

网:目标/通用/台/箱/ myappname

我建立使用的应用程序与SBT-本机打包和运行SBT sbt compile stage。在我的本地机器上,当我运行target/universal/stage/bin/myappname我可以用下面的日志成功启动Jetty服务器:

开始在端口4000
[主] INFO org.eclipse.jetty.util.log - 记录初始化@ 285ms
[main] INFO org.eclipse.jetty.server.Server - jetty-9.2.3.v20140905
[main] INFO org.eclipse.jetty.server.handler.ContextHandler - 已启动oejsServletContextHandler @ 45c5082a {/,null ,AVAILABLE}
[main] 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]:用命令`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 - Started @ 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

对于我来说,改变'BlazeBuilder.bindHttp(Properties.envOrElse( “PORT”, “8080”)。toInt)''来BlazeBuilder.bindHttp (Properties.envOrElse(“PORT”,“8080”)toInt,“0.0.0.0”)'解决了这个问题(我使用Blaze后端代替Jetty,但它应该没有区别)。 – 2015-11-13 13:41:34

回答

0

放眼望去这里查看involvingerror code,我有以下几点建议:

  • 确保您可以在本地启动您的应用foreman start
  • 了解如何启动HTTPS上/码头应用不同的端口(我还没有使用它)
    • (作为一个例子,我将使用Play2,这是设置http.port什么工作)
  • 编辑您的Procfile,追加使用$ PORT像这样的http.port说法:

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

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

+0

我可以用'工头开始'在本地启动我的应用程序。我的代码在由环境变量PORT定义的端口上启动应用程序:'val port = Properties.envOrElse(“PORT”,“8080”).toInt'。我还将'-Dhttp.port = $ PORT'添加到Procfile中,但没有成功。 – tuzhucheng 2014-11-23 18:54:20

+0

您的应用需要多长时间才能在本地启动?在你的Heroku日志中,它看起来像一切都很好,直到它挂起等待“org.eclipse.jetty.server.Server - Started”。任何想法,如果在你的应用程序中可能会导致此? – codefinger 2014-12-05 14:57:25

1

你可能听本地主机,而不是0.0.0.0