【发布时间】:2014-10-28 03:42:24
【问题描述】:
这是一个正在进行的项目的一部分...将域对象拆分出来,以便它们可以被多个应用程序使用。域对象的数据库迁移文件与插件一起使用......但我们希望应用能够在 dbm-update 期间引用它们。
我可以让应用程序识别插件更改日志,但在那之后,更改日志不会按我的预期执行包含和处理它们。
使用 GrailsPluginUtils 我能够获取插件的路径和插件更改日志,我用它来创建一个包含文件。如果我将 changeSet 放在该文件中,我很好,它会运行。如果我将它移动到同一文件夹或子文件夹中的单独文件,并通过“./someFile.groovy”引用它,它似乎找到它但不处理它。我说它似乎找到了它,因为如果我不使用相对文件路径,迁移过程会抛出一个错误,说它找不到文件,例如“someFile.groovy”...
我有一些变通方法,但它们是不可接受的,因为我们希望通过使用带有 _changelog.groovy 的子目录来控制 DB 迁移发生的顺序,该 _changelog.groovy 然后包含实际的转换(changeSets)。但它们并没有被“包含”。
如果我使用 includeAll,它将抓取该文件夹中的所有脚本,但同样不会处理其中引用的任何其他包含。我可以编写一个脚本以递归方式扫描文件夹,但同样需要大量编码来解析 _changelogs 并获取适当的包含顺序等。
我真的只想让“包含文件:”像在给定应用程序中一样为它自己的变更日志文件工作。
还有其他人做过吗?我是否遗漏了一些非常明显的东西?
在应用中...
databaseChangeLog {
...
include file: "${GrailsPluginUtils.pluginInfos.find { it.name == 'my-plugin' }.pluginDir}/grails-app/migrations/my_plugin_changes"
}
...在插件中...
databaseChangeLog {
include file: "./someChangeLogChangeSet.groovy"
}
谢谢...
【问题讨论】:
标签: grails dbmigrate changelog