2014-08-30 18 views
1

我使用類型安全配置的配置來獲得環境變量是這樣的:

service { 
    host = "localhost" 
    host = ${?HOST} 
    port = 8080 
    port = ${?PORT} 
    ports { 
     tcp = 6969 
     ws = 6696 
    } 
} 

在我Boot.scala我寫道:

val host = config.getString("service.host") 
    val portHTTP = config.getInt("service.port") 
    val rootService = system.actorOf(Props(new RootService())) 

    IO(Http) ! Http.Bind(rootService, interface = host, port = portHTTP) 

這應該是蠻好的!我看見heroku log信息:

2014-08-30T17:39:38.867872+00:00 app[web.1]: [spray-blog-akka.actor.default-dispatcher-4] [akka://spray-blog/user/IO-HTTP/listener-0] Bound to localhost/127.0.0.1:25870 
2014-08-30T17:40:37.007696+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 

好像我已經綁定到特定端口:Bound to localhost/127.0.0.1:25870,但60秒後的Heroku仍然說,我沒有綁定到它的時候了!

我複製並從Heroku的粘貼我的啓動腳本提供了示例應用程序:web: target/start com.mturk.Boot -Dhttp.port=${PORT} -Dconfig.file=conf/application.conf

我想不出是什麼問題!太沮喪了!

回答

3

我相信Heroku會告訴你必須使用的端口。你可以拿起從Heroku的的$ PORT環境變量在你Boot.scala有一個額外的代碼行

VAL MyPort上= Properties.envOrElse( 「PORT」, 「8080」)。toInt //爲 的Heroku兼容性

IO(Http)(系統)! Http.Bind(rootService, 「0.0.0.0」,端口= MyPort上)

您可能需要當然是一個額外的進口:

進口util.Properties

0

免責聲明只是給你一個提示,如何潛在解決這個問題。如果答案真的沒有幫助,我很抱歉。

難道那是你在日誌中看到的端口是隨機的,Spray是自動生成的,而Heroku只是檢查它自己的,因此錯誤中顯示的不匹配?只是猜測。

我使用以下build.sbt,所以我可以用類型安全的配置工作:

libraryDependencies += "com.typesafe" % "config" % "1.2.1" 

沒有其他文件是在項目中。

我用SBT_OPTS="-Dhttp.port=10876"運行sbt來模仿Heroku如何將配置傳遞給應用程序 - 通過系統屬性。

➜ typesafe-config SBT_OPTS="-Dhttp.port=10876" xsbt 
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins 
[info] Set current project to typesafe-config (in build file:/Users/jacek/sandbox/typesafe-config/) 
> console 
[info] Updating {file:/Users/jacek/sandbox/typesafe-config/}typesafe-config... 
[info] Resolving org.fusesource.jansi#jansi;1.4 ... 
[info] Done updating. 
[info] Starting scala interpreter... 
[info] 
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_20). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import com.typesafe.config.ConfigFactory 
import com.typesafe.config.ConfigFactory 

scala> val conf = ConfigFactory.load() 
conf: com.typesafe.config.Config = Config(SimpleConfigObject({"awt":{"toolkit":"sun.lwawt.macosx.LWCToolkit"},"file":{"encoding":... 

scala> conf.getInt("http.port") 
res0: Int = 10876 

你可以嘗試使用http.portHOST檢查環境變量是否被傳遞到您的應用程序?

相關問題