Wie verschiedene Datenbanken pro Umgebung in Spielen 2.0?
Ich würde gerne meine Play-app verwenden unterschiedliche Datenbanken für test -, lokalen und Produktion (Produktion Heroku) - Umgebungen.
In application.conf
ich habe:
db.default.driver=org.postgresql.Driver
%dev.db.default.url="jdbc:postgresql://localhost/foobar"
%test.db.default.url="jdbc:postgresql://localhost/foobar-test"
%prod.db.default.url=${DATABASE_URL}
Diese scheint nicht zu funktionieren. Wenn ich play test
oder play run
,
alle DB-Zugriff schlägt fehl mit:
Configuration error [Missing configuration [db.default.url]] (Configuration.scala:258)
Habe ich ein paar Fragen dazu:
-
Im Allgemeinen, ich bin ein wenig verwirrt darüber, wie Datenbanken konfiguriert sind
im Spiel: es sieht aus wie es ' s plaindb
,db.[DBNAME]
unddb.
und verschiedene übungen machen unterschiedliche Entscheidungen unter
[DBNAME].url
diese. Bestimmte Ausdrücke, die scheinen, wie Sie funktionieren sollte (z.B.db.default.url = "jdbc:..."
fehl mit einer Fehlermeldung, dass ein string war vorgesehen, wo ein Objekt erwartet wurde). -
Ich habe gesehen, andere Leute, dass ich erstellen Sie separate
prod.conf
,dev.conf
undtest.conf
Dateien, die jeweilsapplication.conf
und dann enthalten DB-spezifische Konfiguration. Aber in diesem Fall, wie kann ich festlegen, welche Datenbank zu verwenden, wenn ich laufentest
von der Spielkonsole? -
Ist die
%env
syntax soll an die Arbeit in Spiel 2? -
Was ist der richtige Weg, um geben Sie eine Umgebung für
play test
zu verwenden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Spiel 2 gibt es nicht verschiedene config-Umgebungen. Statt Sie nur festlegen oder überschreiben der config-Parameter in der
conf/application.conf
- Datei. Ein Weg dazu ist es auf derplay
Kommandozeile:Können Sie auch sagen Sie Spielen, um eine andere config-Datei:
Für ein Beispiel Procfile für Heroku finden Sie unter:
https://github.com/jamesward/play2bars/blob/scala-anorm/Procfile
Mehr details in den Spielen Docs:
http://www.playframework.org/documentation/2.0/Configuration
%prod
Tipps wurden für das Spiel 1.x? Danke für die Beispiele. Eigentlich habe ich die dev/prod-Konfiguration Problem gearbeitet an dieser Stelle. Meine Frage bleibt immer noch: wie Konfiguriere ich Spielen, um eine andere Umgebung bei der Ausführung der test-suite?%prod
Zeug ist Spielen 1.x nur. Sie sollten in der Lage sein, das gleiche zu tun, wenn Sie die tests ausführen:play -Dsetting=foo ~test
Zumindest in Spielen 2.1.1 es ist möglicherweise zum überschreiben der Konfiguration Werte mit Umgebungsvariablen, wenn Sie gesetzt sind. (Für details siehe: http://www.playframework.com/documentation/2.1.1/ProductionConfiguration)
So können Sie den folgenden in Ihre
conf/application.conf
:per default verwendet die JDBC-URL definiert, es sei denn, die Umgebungsvariable
DATABASE_URL_DB
definiert einen Wert für ihn.So kann man einfach setzen Sie Ihre Entwicklung Datenbank in der Konfiguration und für die Produktion oder die Stufen definieren Sie die Umgebungsvariable.
Aber Vorsicht, diese substitution FUNKTIONIERT NICHT wenn du deine variable Referenz innerhalb quoted strings:
Statt, nur unquote Abschnitt ersetzt werden, zum Beispiel.
In diesem Beispiel "localhost" wird standardmäßig verwendet, wenn die Umgebungsvariable
ENV_DATABASE_HOST
ist nicht festgelegt. (Für details siehe: https://www.playframework.com/documentation/2.5.x/ConfigFile#substitutions)Kann man tatsächlich noch mit der Play-1.0 config Wert naming-Methode, in Spiel 2, wenn Sie, wenn Sie load config Werte, überprüfen Sie, ob
Play.isTest
, und dann das Präfix der Eigenschaften, die Sie laden mit 'testen.'. Hier ein snipped:Und der zugehörigen config-snippet:
Jetzt brauchen Sie nicht daran zu erinnern, irgendwelche Eigenschaften von system, wenn Sie Ihren e2e-test-suite, und Sie nicht versehentlich eine Verbindung zu der prod-Datenbank.
Ich nehme an, Sie können Optional Ort der
test.
Werte in einer separaten Datei, die Sie würde dann am Ende der Haupt-config-Datei, denke ich.Es ist ein weiterer Ansatz ist das überschreiben Global /GlobalSettings Methode onLoadConfig und von dort können Sie die setup-Anwendung Konfiguration mit generic config " und die jeweilige Umgebung der Konfiguration wie unten...
Können Sie überprüfen, http://bit.ly/1AiZvX5 für meine Beispiel-Implementierung.
Hoffe, das hilft.
Off-topic, aber wenn Sie Folgen 12-Faktor-app dann mit separaten Konfigurationen benannt nach Umgebungen ist schlecht:
Another aspect of config management is grouping. Sometimes apps batch config into named groups (often called “environments”) named after specific deploys, such as the development, test, and production environments in Rails. This method does not scale cleanly: as more deploys of the app are created, new environment names are necessary, such as staging or qa. As the project grows further, developers may add their own special environments like joes-staging, resulting in a combinatorial explosion of config which makes managing deploys of the app very brittle
Quelle: http://12factor.net/config