我需要一些帮助。我已经配置了数据库迁移插件,如文档所示:
grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
运行' grails run-app'时,此功能正常。我的数据库按预期迁移,但在部署我的' grails war'时,我将如何获得此行为?工件
我已经在tomcat上测试了它,通过手动将工件复制到tomcat / webapps文件夹,但在部署期间,hibernate抱怨缺少列(应该由数据库迁移插件创建的列)。
有什么想法吗?
谢谢!
答案 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脚本,而不是编译类)。