【问题标题】:How to set up PostgreSQL for Play 2.0?如何为 Play 2.0 设置 PostgreSQL?
【发布时间】:2012-04-23 14:21:19
【问题描述】:

我想为我的 Play 应用配置 PostgreSQL,但收到以下错误:

! 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:play@localhost:9000/Play_Playground_DB"
db.default.user=play
db.default.password=play
db.default.driver=org.postgresql.Driver

project/Build.scala

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

我设置了Play_Playground_DB,可以通过终端和命令psql Play_Playground_DB访问。

问题的根本原因是什么?

【问题讨论】:

  • 那个 URL 不是 PostgreSQL 能识别的;大概框架正在拆开它并挑选出所需的部分?另外,我建议您阅读本节并更新您的驱动程序 jar:jdbc.postgresql.org/download.html#current
  • 谢谢!将其更新为当前版本。

标签: postgresql scala playframework-2.0


【解决方案1】:

这很可能是问题所在:

db.default.url="postgres://play:play@localhost: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

【讨论】:

  • 谢谢,您发布的最后一个 URL 就是解决方案。现在工作!只是想知道为什么这里描述不同:github.com/playframework/Play20/wiki/SettingsJDBC
  • 我使用了这个配置:db.default.url="jdbc:postgresql://localhost/Play_Playground_DB"
  • @TomTom:关于 github 链接:这是关于“BoneCP”的,它是一个楔入数据库和应用程序/框架之间的连接池。使用连接池通常需要非标准 URL。
  • 我正在使用 Play 2.0.4 并且在没有添加 jdbc: 到 URL 的情况下让它工作。但是,您很可能在默认端口 (5432) 上运行 PostGres,尤其是 9000 是 Play 使用的默认 HTTP 端口。
  • 对于任何有同样问题的人,这是正确的答案,但是我必须从 Play 执行 reload!控制台因为修改Build.scala不会生效,除非你退出控制台,或者执行reload,然后执行dependencies
【解决方案2】:

在我的 OSX 上,我从 homebrew 安装了 PostgreSQL,当前版本是 9.3.4

上面描述的连接字符串对我不起作用,因为它们使用的是 postresql 数据库名称。当且仅当我指定如下时,我的连接才会建立:

db.default.url="postgres://user:password@localhost/MyDbName"

注意它是 postgres 而不是 postgresql

【讨论】:

  • 这解决了我遇到的问题。我正在使用 Postgres 9.2.3 和 Play 2.3.0
猜你喜欢
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多