用Grails分解上下文

用Grails分解上下文,grails,liquibase,Grails,Liquibase,我在让Liquibase变更集上下文在Grails应用程序中很好地发挥作用时遇到了一个问题。我有一组变更集,我只想在“测试”上下文中运行。然而,它们每次都在执行。我想我的配置有问题 Liquibase文档声明您只需将context=“test”属性添加到变更集中。对于我的概念验证测试,我将创建一个要在测试中插入的病历插入,但不在本地开发环境中插入。我的变更集添加了上下文: <changeSet id="v1.1-garbage-1" author="Eric" context="test"

我在让Liquibase变更集上下文在Grails应用程序中很好地发挥作用时遇到了一个问题。我有一组变更集,我只想在“测试”上下文中运行。然而,它们每次都在执行。我想我的配置有问题

Liquibase文档声明您只需将context=“test”属性添加到变更集中。对于我的概念验证测试,我将创建一个要在测试中插入的病历插入,但不在本地开发环境中插入。我的变更集添加了上下文:

<changeSet id="v1.1-garbage-1" author="Eric" context="test">
    <insert tableName="patient">
        [...]
    </insert>
</changeSet>
所以我有两个环境,开发和测试。然后在我的Config.groovy中,我将Grails databasemigration插件设置为只包含“开发”上下文(对于这个概念验证):

在最后一行中,据我所知,我告诉databasemigration插件将“开发”上下文设置为“开发”,因此当Liquibase执行时,它不应该运行上面的变更集,因为它是在“测试”上下文中定义的


然而,当我运行应用程序时,我的变更集被执行。我在设置中有哪些地方出错或遗漏了?

我打赌最后一个配置行没有达到您期望的效果

根据“多数据源示例”一节,此语法用于多个数据源。因此,在您的例子中,
updateOnStartContexts
参数将应用于名为
datasource\u development
的数据源,您显然没有这个数据源

您是否可以尝试以下方法:

environments {
    development{
        grails.plugin.databasemigration.updateOnStartContexts = ['development']
    }
}
// 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']
environments {
    development{
        grails.plugin.databasemigration.updateOnStartContexts = ['development']
    }
}