Grails数据库迁移 - dbm-gorm-diff无效

时间:2014-05-14 04:37:26

标签: grails database-migration grails-2.3

我在新项目中使用Grails 2.3.5和数据库迁移插件来了解它是如何工作的。但有时dbm-gorm-diff会提供空的changelog文件,甚至有更改。 例如,

我有人域类没有任何属性。 最初创建更改日志时,它将在更改日志中创建2个字段ID和版本。 之后,将2fields名称,年龄添加到该人员类中。然后做了dbm-update和dbm-gorm-diff,给出了类似的内容。

databaseChangeLog = { }

有时提供更改。有时候不起作用。请帮我。为什么它这样工作。抱歉英文不好。

3 个答案:

答案 0 :(得分:5)

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

设置

  1. dbCreate
  2. 移除DataSource.groovy
  3. 最初运行grails dbm-generate-gorm-changelog changelog.groovy
  4. 通过运行grails dbm-changelog-sync
  5. 将更改日志与您的数据库同步

    更改域名

    1. 更改域类
    2. 运行grails dbm-gorm-diff <your-filename>.groovy --add
    3. 运行grails dbm-changelog-sync
    4. 希望这有帮助

答案 1 :(得分:3)

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

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

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

然而,重新启动Grails交互式shell似乎确实能够可靠地工作,我认为这样做无法实现:)

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

答案 2 :(得分:2)

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