2012-04-23 73 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