5

Für meine Play 2.2/Scala-Anwendung (mit SBT erstellt) würde ich gerne verschiedene Konfigurationsdateien bereitstellen, abhängig von der Umgebung, in der ich bin (z. B. um eine Bereitstellung mit einem bestimmten Datenbankserver zu verbinden). Wie erstellt man verschiedene Varianten der Konfigurationsdatei der Anwendung (conf/application.conf) für verschiedene Implementierungsziele? Hoffentlich können Varianten aus einer Basisversion generiert werden?Play Framework - Wie werden Konfigurationsdateien für verschiedene Umgebungen verwaltet?

Was ich von .NET gewohnt bin, ist eine Basiskonfigurationsdatei (Web.config), die je nach Profil (zum Beispiel Produktion) eine bestimmte Transformation erfährt. Benutzt man eine ähnliche Technik in der Play/Scala-Welt?

Antwort

16

Alternative configuration files sind in Play-Dokumentation ziemlich gut in Abschnitt Specifying alternative configuration file abgedeckt.

Kurz gesagt - in application.conf legen Sie die Standardkonfiguration Ihrer App, und zusätzlich müssen Sie zusätzliche Dateien für Ihre Umgebung (en) erstellen, dh. life.conf, dev.conf usw. In diesen Dateien müssen Sie zuerst application.conf (die die gesamte Standardkonfiguration lesen) und nur Teile, die geändert werden müssen - dh. DB-Anmeldeinformationen, könnte es dev.conf sein:

include "application.conf" 

db.default.driver=org.h2.Driver 
db.default.url="jdbc:h2:mem:alternative-database-for-dev-testing" 
db.default.user=developer 
db.default.password="developerpass" 

So schließlich Sie Ihre Anwendung starten (nach dist) als

./start -Dconfig.resource=dev.conf 

oder mit der Play-Konsole

play -Dconfig.resource=dev.conf run 

Mehrere Tipps:

  • Es ist eine gute Idee zu tun nicht Platzieren Sie Ihre 'Leben' DB-Anmeldeinformationen in Standard-application.conf Datei, wenn einige Entwickler werden vergessen, seine dev.conf einzuschließen er wird die Produktion DB nicht beschädigen, stattdessen sollten Sie es in prod.conf setzen.
  • Auch diese zusätzlichen Konfigurationen sollten nicht in ein VCS-Repository (dh git) platziert werden - Erstellen sie direkt auf dem Zielrechner (und Ignorieren im Repository) geben Sie sicher, dass Personen, die die Life-Datenbank Anmeldeinformationen nicht wissen sollten Ich sehe es nicht.
  • Es ist auch möglich, Remote-alternative Konfigurationsdatei zu verwenden, die nützlich sein kann, z. Wenn Sie mehrere Instanzen derselben App bereitstellen, z. auf mehreren Hosts in der Cloud.
  • Jeder Entwickler kann eigene Konfigurationsdatei haben, dh dev_aknuds1.conf, dev_biesior.conf etc, so dass Sie sie mit einem Muster dev_*.conf in Repo ignorieren können.
  • Schließlich können Sie nur einen Shell-Skript (Unix) oder Bitten-Datei (Windows) erstellen run_dev.sh mit gewählter Konfigurationsdatei wie start_dev.sh, starten usw., so dass Sie -Dconfig.resource=... jedes Mal
+0

Ja, nicht schreiben müssen, aber es sagt nicht, wie man Konfigurationsdateivarianten erzeugt, was hier das Kernproblem ist. – aknuds1

+0

Ist das nicht genau das, was Biesor dir gerade beschrieben hat? Include baut eine Konfigurationsdatei auf einer anderen auf und überschreibt nur die Einstellungen, die anders sein sollen. – johanandren

+0

@johanandren Die Antwort wurde erweitert, seit ich das erste Mal kommentiert habe.Ich sehe jetzt auch, dass die "include" -Technik in der Dokumentation erwähnt wird; Es ist leicht zu erkennen, dass es mir jetzt bewusst ist. Ich wünschte, es wäre für jemanden, der neu ist, offensichtlicher. Alles in allem sieht das nach einer großartigen Lösung aus. – aknuds1