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。我试过发出其他命令,如 clean
、compile
、package
和 refresh-dependencies
,但它们只是不起作用,而且 Grails 交互式 shell 启动时的 -reloading
标志似乎没有也可以有所作为。
但是,重新启动 Grails 交互式 shell 似乎确实可以可靠地工作,我觉得这样做很麻烦 :)
那些不使用交互式 shell 的人应该不会遇到这个问题,因为域类是在每次命令调用时加载的。
【讨论】:
我也遇到过同样的事情。我让交互式 shell 运行并使用第二个控制台选项卡从裸命令行发出 dbm-gorm-* 命令。【参考方案3】:blog有详细的分步说明,特别是迁移旧数据库部分帮助我们成功迁移。
【讨论】:
以上是关于Grails 数据库迁移 - dbm-gorm-diff 不起作用的主要内容,如果未能解决你的问题,请参考以下文章