【问题标题】:Grails migration issues. DBM-UPDATE include not recursing, fails silentlyGrails 迁移问题。 DBM-UPDATE 包括不递归,静默失败
【发布时间】: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


    【解决方案1】:

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

    grails.plugin.databasemigration.changelogLocation = 'migrations' 
    

    如果您确实找到了解决此问题的实际方法,请发布。

    【讨论】:

    • 如果我这样做了,我会高兴得跳起来与全世界分享。我目前的实验是在主变更日志中编写一段代码,这些代码基本上完成了解析/包括迁移插件/liquibase 应该为你做的事情。讨厌它。
    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2017-06-12
    • 2014-07-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2013-06-13
    相关资源
    最近更新 更多