2012-04-23 5 views
14

Ich möchte PostgreSQL für meine Play-App konfigurieren, aber die folgende Störung erhalte:Wie richtet man PostgreSQL für Play 2.0 ein?

! 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] 

ich die folgenden Konfigurationsdateien verwenden:

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 

Projekt/Build.scala

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

Ich habe Play_Playground_DB eingerichtet und kann über das Terminal und den Befehl psql Play_Playground_DB darauf zugreifen.

Was könnte die Ursache des Problems sein?

+0

Diese URL ist nichts, was PostgreSQL erkennen würde; Vermutlich nimmt der Rahmen das auseinander und sucht die benötigten Stücke heraus? Außerdem empfehle ich, dass Sie diesen Abschnitt lesen und Ihren Treiber jar aktualisieren: http://jdbc.postgresql.org/download.html#current – kgrittn

+0

Danke! Es wurde auf die aktuelle Version aktualisiert. –

Antwort

24

Wahrscheinlich ist dies das Problem:

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

Die play doku sagt: "db.default.url" ist eine einfache JDBC-URL. Es gibt zwei Probleme mit Ihrem Wert:

  • Es ist nicht in einem Format von PostgreSQL erkannt. Suchen Sie here nach zulässigen Formaten.
  • Mit ...default... definieren Sie die Standarddatenquelle neu. Standardmäßig erfordert dies Probleme, es sei denn, Sie führen weitere Schritte aus.

Eine gültige PostgreSQL URL könnte so in Ihrem Fall aussehen:

jdbc:postgresql://localhost:9000/Play_Playground_DB 

Aber: _ Sind Sie sicher, dass Ihre Datenbank auf Port 9000 läuft? Sie sagen, psql Play_Playground_DB funktioniert für Sie. Deshalb denke ich, Ihr Port der Standard-Port sollte 5432 und dann diese URL der rechten Seite ist ein:

jdbc:postgresql://localhost/Play_Playground_DB 
+0

Danke, die letzte URL die du postet ist die Lösung. Arbeitet jetzt! Ich frage mich nur, warum es hier anders beschrieben wird: https://github.com/playframework/Play20/wiki/SettingsJDBC –

+0

Ich habe diese Konfiguration verwendet: db.default.url = "jdbc: postgresql: // localhost/Play_Playground_DB" –

+0

@TomTom: Betreffend den GitHub-Link: Dies ist etwa "BoneCP", ein Verbindungspool, der zwischen dem DB und der Anwendung/dem Framework verkeilt ist. Die Verwendung eines Verbindungspools erfordert häufig nicht standardmäßige URLs. –

5

Auf meinem OSX habe ich PostgreSQL von Homebrew und die aktuelle Version installiert ist 9.3.4

Die Verbindungszeichenfolgen, die oben beschrieben werden, funktionieren nicht für mich, da sie Postresql Datenbankname verwenden. Meine Verbindungen werden, wenn und nur wenn ich angeben:

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

Beachten Sie, dass es Postgres statt postgresql ist.

+0

Dies löste das Problem, das ich hatte. Ich benutze Postgres 9.2.3 und Play 2.3.0 – MikeW

Verwandte Themen