Grails迁移问题。 DBM-UPDATE包括不递归,静默失败

时间:2014-09-03 15:02:47

标签: grails dbmigrate changelog

这是正在进行的项目的一部分......拆分域对象,以便多个应用程序可以使用它们。域对象的数据库迁移文件与插件一起使用...但我们希望应用程序能够在dbm-update期间引用它们。

我可以让应用程序识别插件更改日志,但在此之后,更改日志不执行包含并按预期处理它们。

使用GrailsPluginUtils我能够获得插件和插件更改日志的路径,我用它来执行包含文件。如果我把changeSet放在那个文件中我很好,它会运行。如果我将它移动到同一文件夹或子文件夹中的单独文件,并通过“./someFile.groovy”引用它,它似乎找到它但不处理它。我说它似乎找到它,因为如果我不使用相对文件路径,迁移过程会抛出一个错误,说它找不到文件,例如“someFile.groovy”......

我有解决方法,但它们是不可接受的,因为我们希望通过使用带有_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"
}

谢谢...

1 个答案:

答案 0 :(得分:0)

我们还尝试将更改日志文件添加到我们的域所在的插件中但无法从主应用程序访问它。但是,如果要从其他位置访问文件,则可以在配置文件中指定此属性并在此处指定文件夹名称或者甚至将所有迁移复制到主应用程序的相应位置。

grails.plugin.databasemigration.changelogLocation = 'migrations' 

如果您确实找到了实际的解决方案,请发布。