2014-02-15 2 views
0

Я начал работать с существующим проектом Grails и это часть конфигурационного файла (Config.groovy), который имеет дело с внешними файлами конфигурации:Grails внешний файл конфигурации

grails.config.locations = []; 

def defaultConfigFile = "${basedir}/configs/BombayConfig.groovy" 
def defaultDatasourceFile = "${basedir}/configs/BombayDataSource.groovy" 

if(File.separator == "\\") { 
    defaultConfigFile = defaultConfigFile.replace('/', '\\') 
    defaultDatasourceFile = defaultDatasourceFile.replace('/', '\\') 
} 

String PROJECT_NAME = "BOMBAY" 
String CONFIG_ENV = "${PROJECT_NAME}_CONFIG_LOCATION" 
String DATASOURCE_ENV = "${PROJECT_NAME}_DATASOURCE_LOCATION" 

def externalConfig = System.getenv(CONFIG_ENV) 
def externalDataSource = System.getenv(DATASOURCE_ENV) 

if (externalConfig && new File(externalConfig).isFile()) { 
    grails.config.locations << "file:" + externalConfig 
} 
else { 
    grails.config.locations << "file:" + defaultConfigFile 
} 

if (externalDataSource && new File(externalDataSource).isFile()) { 
    grails.config.locations << "file:" + externalDataSource 
} 
else { 
    grails.config.locations << "file:" + defaultDatasourceFile 
} 

У меня есть некоторые файлы по умолчанию в конфиги папка, но на сервере файлы, которые используются находятся в:

/home/someusername/configuration/ 

, который не похож на путь по умолчанию, и нет никаких переменных окружения, указывающие на этот путь, как следует из конфигурации.

Я также попытался найти папку configs, связанную с другой конфигурационной папкой, но ничего не нашел.

Я потерян здесь; как еще можно указать файлы конфигурации для Grails?

Редактировать: Чтобы прояснить ситуацию, сервер работает и работает, я просто хочу выяснить, как он собирает файлы конфигурации из указанного выше пути.

+2

Вы определенно уверены, что эти переменные окружения не передаются _ соответствующему процессу на сервере_ (Tomcat?), Даже если они не установлены в какой-либо оболочке, которую вы проверили? Обычно, когда мне нужно задавать такие вещи, я помещаю настройки среды в сценарий запуска Tomcat. –

+0

Вот что мне не хватало Яна, они были установлены в сценарии. Спасибо! –

ответ

1

Я думаю, что вы намерены использовать запись grails.config.locations []. Ниже комментируется в моем Config.groovy

// grails.config.locations = [ "classpath:${appName}-config.properties",  
//        "classpath:${appName}-config.groovy", 
//        "file:${userHome}/.grails/${appName}-config.properties", 
//        "file:${userHome}/.grails/${appName}-config.groovy"] 

Так вы не можете указать что-то вроде этого:

grails.config.locations = [ "file:${userHome}/configuration" ] 

пикап файлы в этой папке?

+0

Правильно, но способ, которым обрабатывает текущий файл конфигурации, не так. См. Мое обновленное сообщение. –

1
if(File.separator == "\\") { 
    defaultConfigFile = defaultConfigFile.replace('/', '\\') 
    defaultDatasourceFile = defaultDatasourceFile.replace('/', '\\') 
} 

Это, вероятно, вызовет проблемы - grails.config.locations список URL-адресов , не родные путей к файлам, так что вы определенно хотите вперед, а не обратную косую черту. Вместо того, чтобы попробовать что-то вроде

File defaultConfigFile = new File(basedir, "configs/BombayConfig.groovy") 
// and the same for datasource 

// ... 
File externalConfig = System.getenv(CONFIG_ENV) ? new File(System.getenv(CONFIG_ENV)) : null 

if (externalConfig?.isFile()) { 
    grails.config.locations << externalConfig.toURI().toString() 
} 
else { 
    grails.config.locations << defaultConfigFile.toURI().toString() 
} 
1

В случае, если вы боретесь с внешними конфиги и вы есть определяет внешние конфиги, как так в Config.groovy

grails.config.locations = [] 

if(System.properties["${appName}.config.location"]) { 
    grails.config.locations << "file:" + System.properties["${appName}.config.location"] 
} 

if(System.properties["${appName}.datasource.config.location"]) { 
    grails.config.locations << "file:" + System.properties["${appName}.datasource.config.location"] 
} 

и ваш набор окружение что-то вроде этого

export GRAILS_OPTS="$GRAILS_OPTS -DAppName.config.location=dev-config/Config.groovy" 
export GRAILS_OPTS="$GRAILS_OPTS -DAppName.datasource.config.location=dev-config/DataSource.groovy" 

и dev configs не подбираются, тогда вам нужно заглянуть в свои настройки вилки в BuildConfig.groovy и выключить их как так что

grails.project.fork = [ 
    test: false, 
    run: false, 
] 

Таким образом, когда приложение разветвлено, ваши свойства системы не будут потеряны.

Смежные вопросы