2015-01-28 10 views
5

próbuję zastąpić dataSource.url wartości uruchomiony Grails z linii poleceń, przykładJak zastąpić konfigurację grails z linii poleceń

grails <set property> dbm-status 

Moja pierwsza próba została przy użyciu wiersza parametr polecenia -D jak

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

I próbowałem dodać dodatkowy plik konfiguracyjny do grails.config.locations, który pobiera wartości z System.getProperty, ale wydaje się nie działać.

Istnieje wbudowany sposób na przesłonięcie wartości konfiguracyjnych z wiersza poleceń, w przeciwnym razie w jaki sposób mogę wprowadzić parametr z linii poleceń do konfiguracji grails?

EDYCJA: Nie chcę używać innego środowiska/źródła danych, aby uniknąć duplikowania konfiguracji źródeł danych i potrzeby konfiguracji rzeczy dla tego nowego środowiska.

+0

może Trzeba dodać, że jako oddzielny źródła danych jako [pokazane w docs] (http://grails-plugins.github.io /grails-database-migration/docs/manual/ref/Maintenance%20Scripts/dbm-status.html). – dmahapatro

+0

Próbuję uruchomić projekt przy użyciu źródła danych produktu, zastępując jedynie nazwę bazy danych. Muszę uruchamiać wiele skryptów migracji i nie chcę duplikować źródła danych produkcyjnych. Ponadto mam url mojego źródła danych uzewnętrznionego w plikach właściwości, mamy 3 środowisko produkcyjne (prod1, prod2, qa). –

Odpowiedz

1

Dodanie następującego if w DataSource.groovy Jestem w stanie zastąpić adres URL, hasło i nazwę użytkownika, jeśli podany jest adres URL. (Ważny dla 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'] 
     } 
    } 
} 
... 

Teraz kiedy uruchomić polecenia, zastępuje się stosować:

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

Niestety, jeśli chcesz być w stanie zastąpić w każdym środowisku trzeba powielać ten kod dla każdego bloku env. Jeśli wyciągniesz go do root'a, to nie będzie działać, ponieważ konfiguracja scalania kopnięć i ostatni przebieg będzie faktycznie dotyczył tego, co znajduje się w bloku env {}, a nie tego, co jest we właściwościach systemu.

Patrząc na to znowu coś takiego wygląda jeszcze lepiej:

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