Grails 数据库迁移插件 updateOnStart 不起作用
Posted
技术标签:
【中文标题】Grails 数据库迁移插件 updateOnStart 不起作用【英文标题】:Grails database migration plugin updateOnStart is not working 【发布时间】:2014-05-19 01:21:31 【问题描述】:我需要一些帮助。如文档所述,我已配置数据库迁移插件:
grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
这在运行“grails run-app”时效果很好。我的数据库已按预期迁移,但是在部署我的“grails war”工件时我将如何获得这种行为?
我已经在 tomcat 上对其进行了测试,通过手动将工件复制到 tomcat/webapps 文件夹,但在部署期间,hibernate 抱怨缺少列(应该由数据库迁移插件创建的列)。
有什么想法吗?
谢谢!
【问题讨论】:
您的问题解决了吗?我遇到了同样的问题,似乎 grails 没有收到changelog.groovy
,我收到了 changelog.groovy not found
我尝试将更改日志复制到不同的位置,但我仍然收到此错误。
【参考方案1】:
你确定这两行代码在生产环境中也可用吗?
这是我通常在应用程序中执行的示例:
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
另外,请务必在 DataSource.groovy
中注释掉相关的 dbCreate
条目以避免迁移问题。
【讨论】:
嗯,我明白了。就我而言,我没有将它放在特定的环境中,但是我在环境块之后添加了这两行,因此(我猜)这意味着它会在任何地方运行。你如何部署你的应用程序?您是执行 grails 命令来执行此操作,还是将 app.war 复制到 tomcat(或其他容器)? 是的,将这些行从环境块中移出也应该迁移您的数据库。我怀疑您的配置中还有其他设置可能会改变行为。【参考方案2】:查看类似问题的答案https://***.com/a/25053160/3939511
我发现 grails.plugin.databasemigration.changelogLocation
在编译时的默认值是正确的,可以将您的更改日志包含在生产战争中。 IE。我不会在编译时在Config.groovy
中设置/更改此属性。
但在部署中我设置了grails.plugin.databasemigration.changelogLocation = 'migrations'
,因为更改日志最终在WEB-INF/classes/migrations/
中(作为常规脚本,而不是编译的类)。
【讨论】:
【参考方案3】:我相信如果您执行 dbm-update 来在目标数据库中为您创建补丁。
从 Grails 网站上获取的。 http://grails-plugins.github.io/grails-database-migration/docs/manual/ref/Update%20Scripts/dbm-update.html
dbm-更新 目的
将数据库更新到当前版本。
说明
从变更日志运行所有未运行的变更集。针对在 DataSource.groovy 中为当前环境配置的数据库执行(默认为 dev)。
用法:
【讨论】:
我不明白这对我有什么帮助。我正在寻找一个不涉及运行 grails 命令的解决方案,我希望能够在 tomcat 上部署我的战争,然后在部署期间完成我的迁移......以上是关于Grails 数据库迁移插件 updateOnStart 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Grails 2.3 数据库迁移上的“加载插件管理器时出错:TomcatGrailsPlugin”
带有数据库迁移插件的 Grails 3:类 [com.mypackage.security.RequestMap] 上的方法在 Grails 应用程序之外使用