2015-01-28 9 views
5

sto cercando di ignorare dataSource.url valore esecuzione graal dalla riga di comando, ad esempioCome ignorare la configurazione graal da linea di comando

grails <set property> dbm-status 

Il mio primo tentativo stava usando parametro della riga -D comando come

grails -DdataSource.url=jdbc:sqlserver://xx.xx.xx.xx;databaseName=db_name 

I ho provato ad aggiungere un ulteriore file di configurazione a grails.config.locations che ottiene valori da System.getProperty ma sembra non funzionare.

Esiste un modo integrato per sovrascrivere i valori di configurazione dalla riga di comando, altrimenti come posso immettere parametri dalla riga di comando alla configurazione di Grails?

MODIFICA: non desidero utilizzare un altro ambiente/origine dati per evitare la duplicazione della configurazione dell'origine dati e la necessità di configurare le cose per questo nuovo ambiente.

+0

potrebbe essere necessario aggiungere che come origine dati separato come [indicato nella documentazione] (http://grails-plugins.github.io /grails-database-migration/docs/manual/ref/Maintenance%20Scripts/dbm-status.html). – dmahapatro

+0

Sto provando ad avviare il progetto utilizzando l'origine dati prodotto sostituendo solo il nome db. Devo eseguire più volte gli script di migrazione e non voglio duplicare l'origine dati di produzione. Inoltre ho l'url della mia origine dati esternalizzata in un file di proprietà, abbiamo 3 ambienti di produzione (prod1, prod2, qa). –

risposta

1

Includendo il seguente if in DataSource.groovy Sono in grado di ignorare la proprietà url, password e nome utente se viene fornito url. (Valido per Grails 2.x)

.... 
environments { 
    development { 
     dataSource { 
     url = "jdbc:postgresql://localhost/db" 
     username = "user" 
     password = "pass" 
     if (System.properties['dataSourceUrl']) { 
      println 'Taking dataSource url, password, username from command line overrides' 
      url = System.properties['dataSourceUrl'] 
      password = System.properties['dataSourcePassword'] 
      username = System.properties['dataSourceUsername'] 
     } 
    } 
} 
... 

Ora, quando faccio funzionare l'ordine, le sostituzioni vengono applicate:

grails dev -DdataSourceUrl=newUrl -DdataSourcePassword=newPass -DdataSourceUsername=newUser run-app 

Purtroppo, se si vuole essere in grado di ignorare in ogni ambiente si deve duplicare questo codice per ogni blocco env. Se lo si fa risalire alla radice, non funzionerà poiché config unisce i kick e l'ultima esecuzione applicherà effettivamente ciò che è nel blocco env {} e non ciò che è nelle proprietà del sistema.

Guardando di nuovo una cosa del genere sembra ancora meglio:

... 
    url = System.properties['dataSourceUrl'] ?: 'jdbc:postgresql://localhost/db' 
    //and for every property... 
...