Grails数据库迁移插件updateOnStart不起作用

时间:2014-04-07 00:07:26

标签: grails groovy database-migration

我需要一些帮助。我已经配置了数据库迁移插件,如文档所示:

grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']

运行' grails run-app'时,此功能正常。我的数据库按预期迁移,但在部署我的' grails war'时,我将如何获得此行为?工件

我已经在tomcat上测试了它,通过手动将工件复制到tomcat / webapps文件夹,但在部署期间,hibernate抱怨缺少列(应该由数据库迁移插件创建的列)。

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

您确定这两行代码在生产环境中也可用吗?

这是我通常在我的应用程序中执行的操作的示例:

environments {
    development {
        grails.plugin.databasemigration.updateOnStart = true
        grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
        // ... other useful development settings
    }
    test {
        grails.plugin.databasemigration.updateOnStart = true
        grails.plugin.databasemigration.autoMigrateScripts = ['RunApp','TestApp']
        grails.plugin.databasemigration.forceAutoMigrate = true
        grails.plugin.databasemigration.dropOnStart = true
        if (loadTestData) {
            grails.plugin.databasemigration.updateOnStartFileNames = ['testchangelog.groovy', 'testdata.groovy']
        } else {
            grails.plugin.databasemigration.updateOnStartFileNames = ['testchangelog.groovy']
        // ... something test-related
        }
    }
    production {
        grails.plugin.databasemigration.updateOnStart = true
        grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
        // ... production config settings
    }
}

另外,请务必在dbCreate中注释掉相关的DataSource.groovy条目,以避免迁移问题。

答案 1 :(得分:0)

我相信如果您执行dbm-update,可以在目标数据库中为您创建补丁。

从Grails网站抓取这个。 http://grails-plugins.github.io/grails-database-migration/docs/manual/ref/Update%20Scripts/dbm-update.html

DBM-更新 目的

将数据库更新为当前版本。

描述

从更改日志中运行所有未运行的changeSet。针对当前环境的DataSource.groovy中配置的数据库执行(默认为dev)。

用法:

答案 2 :(得分:0)

查看类似问题https://stackoverflow.com/a/25053160/3939511

的答案

我发现编译时grails.plugin.databasemigration.changelogLocation的默认值是正确的,以便将更改日志包含在生产战争中。即我没有在编译时在Config.groovy中设置/更改此属性。

但是在部署中我设置了grails.plugin.databasemigration.changelogLocation = 'migrations',因为更改日志最终在WEB-INF/classes/migrations/中(作为groovy脚本,而不是编译类)。