2013-10-04 29 views
0

我在使用Liquibase變更上下文以在我的Grails應用程序中很好地播放時遇到問題。我有一組更改集,我只想在「測試」環境中運行。但是,它們每次都在執行。我想我有一個配置問題。Liquibase與Grails的上下文

Liquibase文檔聲明您只需將context =「test」屬性添加到您的changeSet。對於我的概念驗證測試,我將創建一個插入的病人記錄,我想在測試中插入,但不在本地開發環境中插入。我的變更增加了上下文:

<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'] 
    } 
}