2013-02-06 10 views
10

Sto utilizzando playframework 2.1-RC2. Prima di tutto ho visto all thesimilarquestions, quindi ho seguito l'istruzione comune di separare il file application.conf per ambiente. Così ho application.test.conf e ho eseguire i test in questo modo:Impostazioni di Playframework in base all'ambiente

play -Dconfig.file=./conf/application.test.conf "test" 

ho provato diverse combinazioni, come

play -Dconfig.file=./conf/application.test.conf ~test 

o

play -Dconfig.file=conf/application.test.conf ~test 

Ancora nessuna fortuna, semplicemente non non viene prelevato, è invece uno di default (application.conf).

Dall'altra parte, se lo faccio

play -Dconfig.file=./conf/application.dev.conf "run" 

quindi applicazione sceglie la configurazione giusta.

Quindi, come posso specificare il file di configurazione del test?

risposta

13

Ho trovato il modo più robusto per specifiy questo in un cross-platform modo compatibile è quello di includere direttamente nella Build.scala:

val main = play.Project(appName, appVersion, appDependencies).settings(
    javaOptions in Test += "-Dconfig.file=conf/test.conf", 
    ... 
) 

Bonus: configurare una volta e dimenticare ;-)

+0

uomo che hai fatto la mia giornata. Ma come fa che fare la stessa cosa via console non funziona? .. – zapadlo

+0

Non so quale sistema operativo si esegue ma almeno in Windows c'è un bug noto, ma a bassa priorità, che la riproduzione non passa i parametri a la JVM correttamente (e questo è un parametro JVM, non un parametro di riproduzione). SBT fa meglio ;-) – Leo

+2

Questo è un approccio interessante, ma da dove proviene la parola chiave "Test"? È possibile fare la stessa cosa con l'ambiente come dev/preprod/prod ...? Grazie – c4k

1

Un altro approccio è quello di sovrascrivere il metodo su GlobalSettings/Global denominato onLoadConfig e che consente di avere il controllo su dove la tua app cercherà la tua configurazione.

Quindi in una delle nostre applicazioni ho questa configurazione di seguito per la mia cartella conf /.

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 

Con questo, si è in grado di implementare l'ereditarietà come impostazione per la configurazione, si dispone di comuni e altri 3 per la modalità ambiente specifico.

Il codice all'interno del vostro metodo di onLoadConfig deve solo caricare la configurazione principale e impostare la configurazione corretta fallback specifiche per il proprio ambiente per poi tornare l'istanza di configurazione come di seguito:

**return new Configuration(baseConfig.withFallback(envConfig));** 

Prova controllare questo blog post for complete snippet del codice.

Spero che questo aiuti.