Grails 数据库迁移 - dbm-gorm-diff 不起作用

Posted

技术标签:

【中文标题】Grails 数据库迁移 - dbm-gorm-diff 不起作用【英文标题】:Grails Data Base Migration - dbm-gorm-diff is not working 【发布时间】:2014-07-01 23:32:55 【问题描述】:

我在新项目中使用带有数据库迁移插件的 Grails 2.3.5,以了解它是如何工作的。但有时 dbm-gorm-diff 提供空的更改日志文件,即使更改也存在。 例如,

我有没有任何属性的人员域类。 最初创建更改日志时,它将在更改日志中创建 2 个字段 id 和 version。 之后,将 2fields name,age 添加到该人员类中。然后 dbm-update 和 dbm-gorm-diff 给出如下所示。

数据库更改日志 =

有时会给出更改。有时不工作。请帮我。为什么它会这样工作。抱歉英语不好。

【问题讨论】:

我对数据库迁移插件不是很熟悉。根据文档,它说您最初应该运行dbm-generate-gorm-changelog 以从您的域类生成更改日志。它还说如果To create the changelog additions, you can either manually create the changes or with the dbm-gorm-diff script 是的。最初我运行命令并获得初始更改日志。在修改域之后,新的更改日志不会出现,我们也可以手动创建更改日志。我们不能总是使用 dbm-gorm-diff 吗?在哪些场景中我将使用手动创建和 dbm-gorm-diff。 你试过这个教程吗? assarconsulting.blogspot.ch/2011/08/… 您是使用 Grails shell 还是单独执行每个 dbm-* 命令,每次调用命令时都加载 Grails 环境? 【参考方案1】:

使用以下tutorial 对我有用。确保从 DataSource.groovy 中删除 dbCreate。根据tutorial,工作流程如下:

设置

    DataSource.groovy 中删除dbCreate 初始运行grails dbm-generate-gorm-changelog changelog.groovy 通过运行grails dbm-changelog-sync 将更新日志与您的数据库同步

更改域

    更改域类 运行grails dbm-gorm-diff <your-filename>.groovy --add 运行grails dbm-changelog-sync

希望对你有帮助

【讨论】:

【参考方案2】:

我花了一些时间寻找同样问题的答案。

警告:我正在使用 Grails 交互式 shell 发出命令,包括 dbm-* 命令。

仅靠蛮力,我得出的结论是域类无法可靠地重新加载。为了获得一致的结果(尤其是在生成新的changeLog 文件时),每当我修改域类时,我都会在调用dbm-gorm-diff 之前停止并重新启动Grails 交互式shell。我试过发出其他命令,如 cleancompilepackagerefresh-dependencies,但它们只是不起作用,而且 Grails 交互式 shell 启动时的 -reloading 标志似乎没有也可以有所作为。

但是,重新启动 Grails 交互式 shell 似乎确实可以可靠地工作,我觉得这样做很麻烦 :)

那些不使用交互式 shell 的人应该不会遇到这个问题,因为域类是在每次命令调用时加载的。

【讨论】:

我也遇到过同样的事情。我让交互式 shell 运行并使用第二个控制台选项卡从裸命令行发出 dbm-gorm-* 命令。【参考方案3】:

blog有详细的分步说明,特别是迁移旧数据库部分帮助我们成功迁移。

【讨论】:

以上是关于Grails 数据库迁移 - dbm-gorm-diff 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Grails 3 数据库迁移问题

Grails 数据库迁移插件 updateOnStart 不起作用

Grails 2.3 迁移脚本不会在集成测试期间运行

grails4中的数据库迁移插件错误

在 Grails 中进行数据库迁移的良好工作流程是啥?

Grails 3 数据库迁移插件初始化错误