2014-05-19 3 views
5

In particolare, per i casi di test, voglio mantenere separato il database di test in modo che i casi di test non interferiscano con i database di sviluppo o di produzione.Come mantenere separati i database dev, test e prod in Play! 2 Framework?

Quali sono alcune buone pratiche per separare ambienti di sviluppo, test e produzione?

Edit1: Alcuni contesto

in Ruby on Rails, ci sono diversi file di configurazione per convenzione per ambienti diversi. Così gioca! 2 supportano anche questo?

Oppure, devo cucinare i file di configurazione e quindi scrivere un codice di colla che seleziona i file di configurazione appropriati?

Al momento se corro sbt test utilizza il database di sviluppo (configurato come "predefinito" in conf/application.conf). Comunque mi piacerebbe giocare! 2 per utilizzare un database di test diverso.

EDIT2: Su comandi che giocano fornisce

per giocare! 2 framework, ho osservato questo.

$ help play 
Welcome to Play 2.2.2! 

These commands are available: 
----------------------------- 
...OUTPUT SKIPPED... 
run <port>     Run the current application in DEV mode. 
test      Run Junit tests and/or Specs from the command line 
start <port>    Start the current application in another JVM in PROD mode. 
...OUTPUT SKIPPED... 

Ci sono tre comandi ben definiti per "test", "sviluppo" e le istanze di "produzione" che sono:

  • test: Questo viene eseguito i casi di test. Quindi dovrebbe selezionare automaticamente la configurazione test.
  • run <port>: esegue l'istanza development sullo port specificato. Quindi questo comando dovrebbe selezionare automaticamente la configurazione development.
  • start <port>: esegue l'istanza production sullo port specificato. Quindi questo dovrebbe selezionare automaticamente la configurazione production.

Tuttavia, tutti questi comandi selezionano i valori forniti in conf/application.conf. Sento che c'è una lacuna da riempire qui.

Per favore, correggimi se sbaglio.

Edit3: Miglior approccio sta usando Global.scala

descritto qui: How to manage application.conf in several environments with play 2.0?

+0

Diversi file di configurazione? La tua domanda è un po 'troppo generica. – vptheron

+0

Ho appena aggiornato la domanda con "Alcuni contesti". – tuxdna

+0

Mentre le tue modifiche hanno aiutato a chiarire che cosa stai cercando questa domanda ora sembra molto più simile a un duplicato di http://stackoverflow.com/questions/10391987/how-to-set-up-different-databases-per- environment-in-play-2-0 – Exupery

risposta

1

La buona pratica è mantenere istanze separate dell'applicazione in cartelle separate e la sincronizzazione li vale a dire tramite git repo.

Quando si desidera mantenere l'istanza singola è possibile utilizzare alternative configuration file per ciascun ambiente.

+1

Penso che l'approccio "file di configurazione alternativo" sembra buono. Comunque, idealmente vorrei che "sbt test" selezionasse automaticamente la configurazione "test". – tuxdna

+1

Di solito sto creando script di shell per cose come 'dev.sh',' prod.sh' ecc. Usando, ad esempio, Idea con il supporto di Play, puoi semplicemente creare configurazioni di corsa separate – biesior

+2

Ho trovato questo approccio più appropriato: http://stackoverflow.com/a/15937831/1119997 – tuxdna

0

Nel file application.conf è presente una voce (o voci) per il database, ad es.db.default.url=jdbc:mysql://127.0.0.1:3306/devdb

Il file conf può leggere le variabili di ambiente utilizzando la sintassi ${?ENV_VAR_NAME}, quindi modificarlo in qualcosa come db.default.url=${?DB_URL} e utilizzare le variabili di ambiente.

+0

Riproduzione sovrascrive solo le configurazioni selezionate in ulteriori file di configurazione, è documentato ufficialmente – biesior

+0

@biesior scusate, sono confuso dal vostro commento in quanto la mia risposta non ha menzionato nulla sui file di configurazione aggiuntivi – Exupery

+0

Voglio solo dire che non è necessario impostare env vars - i file di configurazione aggiuntivi sono più comodi specialmente quando hai più configurazioni a seconda dell'ambiente scelto – biesior

0

Un modo più semplice per ottenere questo risultato e gestire la configurazione più semplice è tramite GlobalSettings. C'è un metodo che puoi sovrascrivere e che il suo nome è "onLoadConfig". Prova controllare il suo api presso API_LINK

Fondamentalmente sulla cartella conf/progetto, ti configurazione simile al di sotto:

conf/application.conf --> configurations common for all environment 
conf/dev/application.conf --> configurations for development environment 
conf/test/application.conf --> configurations for testing environment 
conf/prod/application.conf --> configurations for production environment 

Quindi, con questo, l'applicazione sa quale configurazione a correre per la modalità ambiente specifico. Per uno snippet di codice della mia implementazione su onLoadConfig prova a controllare il mio articolo al mio blog post

Spero che questo sia utile.

+0

Chi ha downvoted, spiega perché questo è un approccio sbagliato. – SilentDirge