2013-10-04 3 views
0

У меня возникла проблема с тем, чтобы контексты изменений Liquibase играли хорошо в моем приложении Grails. У меня есть набор изменений, которые я хотел бы запускать только в контексте «теста». Тем не менее, они выполняются каждый раз. Я думаю, что у меня проблема конфигурации.Контексты Liquibase с Grails

В документации Liquibase указано, что вам просто нужно добавить атрибут context = "test" в ваш changeSet. Для моего доказательства концептуального теста я собираюсь создать вставку записи пациента, которую я хочу вставить в Test, но не в мою локальную среду разработки. Моя ревизия имеет контекст добавлен:

<changeSet id="v1.1-garbage-1" author="Eric" context="test"> 
    <insert tableName="patient"> 
     [...] 
    </insert> 
</changeSet> 

И тогда в моем файл DataSource.groovy я определяю мои среды:

environments { 
    development { 
    dataSource { 
     dbCreate = "create" 
     jndiName = "java:comp/env/jdbc/mydatabasename" 
    } 
    } 
    test { 
    dataSource { 
     dbCreate = "create" 
     url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000" 
    } 
    } 
[...] 

Так у меня есть два сред, разработка и тестирование. Тогда в моем Config.groovy, я создал Grails databasemigration плагин только контекст «развитие» (для этого доказательства концепции):

// Database Migration plugin 
grails.plugin.databasemigration.updateOnStart = true 
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.xml'] 
grails.plugin.databasemigration.autoMigrateScripts = ['RunApp', 'TestApp'] 
grails.plugin.databasemigration.changelogFileName = "changelog.xml" 
grails.plugin.databasemigration.development.updateOnStartContexts = ['development'] 

В этой последней строке, как я понимаю, я говорю плагин databasemigration, чтобы установить контексты «развития» в «развитие», поэтому, когда Liquibase выполняет, он не должен запускать мой набор изменений выше, потому что он определен в контексте «теста».

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

ответ

0

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

В соответствии с разделом «Несколько источников данных» в http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/3%20Configuration.html этот синтаксис используется для нескольких источников данных. Таким образом, в вашем случае параметр updateOnStartContexts будет применяться к источнику данных с именем dataSource_development, который вы, очевидно, не имеют ...

Вы можете попробовать вместо следующее:

environments { 
    development{ 
     grails.plugin.databasemigration.updateOnStartContexts = ['development'] 
    } 
} 
Смежные вопросы