2012-04-23 51 views
14

我想配置的PostgreSQL爲我播放的應用程序,但我得到以下錯誤:如何設置PostgreSQL for Play 2.0?

! Internal server error, for request [GET /] -> 

java.util.concurrent.TimeoutException: Futures timed out after [300000] milliseconds at 
akka.dispatch.DefaultPromise.ready(Future.scala:834) 
~[akka-actor.jar:2.0] at 
akka.dispatch.DefaultPromise.result(Future.scala:838) 
~[akka-actor.jar:2.0] at akka.dispatch.Await$.result(Future.scala:74) 
~[akka-actor.jar:2.0] at 
play.core.ReloadableApplication.get(ApplicationProvider.scala:108) 
~[play_2.9.1.jar:2.0] at 
play.core.server.Server$class.sendHandler$1(Server.scala:59) 
[play_2.9.1.jar:2.0] at 
play.core.server.Server$$anonfun$getHandlerFor$4.apply(Server.scala:89) 
[play_2.9.1.jar:2.0] [error] application - 

! @6a64i2p5o - Internal server error, for request [GET /] -> 

play.api.PlayException: Not initialized [?]  at 
play.api.PlayException$.apply(Exceptions.scala:122) 
~[play_2.9.1.jar:2.0] at 
play.core.ReloadableApplication.<init>(ApplicationProvider.scala:94) 
~[play_2.9.1.jar:2.0] at 
play.core.server.NettyServer$$anonfun$mainDev$1.apply(NettyServer.scala:165) 
~[play_2.9.1.jar:2.0] at 
play.core.server.NettyServer$$anonfun$mainDev$1.apply(NettyServer.scala:164) 
~[play_2.9.1.jar:2.0] at 
play.utils.Threads$.withContextClassLoader(Threads.scala:17) 
~[play_2.9.1.jar:2.0] at 
play.core.server.NettyServer$.mainDev(NettyServer.scala:163) 
~[play_2.9.1.jar:2.0] 

我用下面的配置文件:

application.conf

db.default.url="postgres://play:[email protected]:9000/Play_Playground_DB" 
db.default.user=play 
db.default.password=play 
db.default.driver=org.postgresql.Driver 

項目/ Build.scala

val appDependencies = Seq(
    "postgresql" % "postgresql" % "9.1-901.jdbc4" 
) 

我設置了Play_Playground_DB,可以通過終端和命令psql Play_Playground_DB訪問它。

問題的根本原因是什麼?

+0

該URL不是PostgreSQL會識別的;據推測,這個框架正在將它們分開並挑選出需要的部分?另外,我建議您閱讀本節並更新驅動程序jar:http://jdbc.postgresql.org/download.html#current – kgrittn 2012-04-23 15:16:39

+0

謝謝!更新到當前版本。 – 2012-04-23 17:31:52

回答

24

最有可能這就是問題所在:

db.default.url="postgres://play:[email protected]:9000/Play_Playground_DB" 

play doku說, 「db.default.url」 是一個普通的JDBC的URL。您的值有兩個問題:

  • 它不是PostgreSQL認可的格式。查看允許格式的here
  • ...default...重新定義默認數據源。默認情況下,除非您執行一些更多步驟,否則將會導致麻煩

有效PostgreSQL的URL可能看起來像這樣在你的情況:

jdbc:postgresql://localhost:9000/Play_Playground_DB 

但是:_確信你的數據庫在端口9000上運行?你說psql Play_Playground_DB適合你。因此,我認爲你的端口應該是默認端口5432。那麼這個URL是正確的:

jdbc:postgresql://localhost/Play_Playground_DB 
+0

謝謝,您發佈的最後一個URL是解決方案。現在工作!只是想知道爲什麼它在這裏有不同的描述:https://github.com/playframework/Play20/wiki/SettingsJDBC – 2012-04-23 17:32:37

+0

我用這個配置:db.default。url =「jdbc:postgresql:// localhost/Play_Playground_DB」 – 2012-04-23 17:35:21

+0

@TomTom:關於github鏈接:這是關於「BoneCP」,一個在DB和應用程序/框架之間嵌套的連接池。使用連接池通常需要非標準的URL。 – 2012-04-23 17:42:15

5

在我的OSX,我從自制和當前版本安裝的PostgreSQL 9.3.4是

的上面描述的連接字符串不適用於我,因爲它們使用postresql數據庫名稱。如果我建立連接且僅當我指定這樣的:

db.default.url="postgres://user:[email protected]/MyDbName" 

請注意,這是的Postgres而不是PostgreSQL的

+0

這解決了我遇到的問題。我使用的是Postgres 9.2.3和Play 2.3.0 – MikeW 2014-06-25 19:25:04