2014-11-22 125 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