【问题标题】:grails database-migration - generates a changelog even when no domain model changesgrails database-migration - 即使没有域模型更改,也会生成更改日志
【发布时间】:2012-12-21 04:18:18
【问题描述】:

我们希望使用数据库迁移工具通过我们的 Jenkins(Hudson) 构建服务器在我们的 UAT 和实时系统中实现数据库架构更改。

最简单的方法是每次运行“-Dgrails.env=uat dbm-gorm-diff changelog-.xml --add”。但是,我的试验表明,即使在域模型中没有更改时,始终会创建“空”更改日志并更新 changelog-master.xml。这并不理想。

是否有一个我没有找到的选项,上面写着:“仅当域模型发生更改时才创建更改日志”?

否则,看起来我将不得不在 Ant 构建脚本中添加步骤以在 changelog-.xml 文件中查找条目,如果未找到:删除该文件并从备份中恢复主变更日志,或对其进行编辑以删除最新的“包含”条目。

如果有人有其他好的想法,他们将非常欢迎。

问候,约翰

【问题讨论】:

  • 什么版本的插件?
  • 版本 1.2.2。这是 GGTS 通过其插件管理器找到的最新版本。我想要的设施是最新的 1.3.2 吗?啊!我刚刚发现(还记得吗?)我必须通过插件管理器显式刷新才能找到任何更高版本。我刚拿到 1.3.2。
  • 1.3.2 的行为方式是否相同?
  • 呃……不。而不是一个“空的”changelog-02,它充满了删除我的两个表及其链接表中所有列的语句。我不明白为什么会这样。它是一个错误吗?我已经仔细检查过了。我可以在数据库中看到 databasechangelog 表,它的内容显示了来自 dbsync 的初始条目,以及当我向其中一个表中添加一列时的一个条目。我的两个域对象没有改变。我刚刚为 uat 环境启动了一个运行应用程序,一切都井井有条。我知道它使用的是同一个数据库,因为我的第一次启动失败了,因为我忘记关闭数据库连接
  • 伯特。我刚刚注意到 DdmGormDiff.groovy 在 1.2.2 和 1.3.2 之间发生了变化,因此可能会有不同的行为。我正在测试我的小脑袋,试图了解如何编写 Gant 脚本。我在 Notepad++ 中打开它作为如何编写 Gant 脚本的一个可能有用的示例(我想要一个脚本来调用 DbmGormdiff 和 parms 以从 Jenkins 调用,以及 test-app 和 war)。当我更新插件时,我允许删除的文件保持打开状态。这就是为什么我可以看到这些变化,但到目前为止,还不能真正理解代码。约翰

标签: grails database-migration


【解决方案1】:

为了避免:

grails.plugin.databasemigration.MigrationUtils.dataSourceNameWithSuffix() 适用于参数类型:(null) values: [null] at

您不必通过更改项目名称等来完成所有这些事情。您只需要清除

"path_to_user_dir"/.grails/projects/"project_name"/scriptCache 目录

【讨论】:

    【解决方案2】:

    安装 1.3.2 似乎在某个地方添加了一些在删除插件时未删除的内容。对不起,不是一个非常科学的描述,但它就是这样出现的。

    我现在回到 1.2.2,但无论我运行什么 dbm-* 脚本,我都会收到相同的错误:

    =======================

    执行脚本时出错 DbmGenerateGormChangelog:groovy.lang.MissingMethodException:没有方法签名:静态 grails.plugin.databasemigration.MigrationUtils.dataSourceNameWithSuffix() 适用于参数类型:(null) 值:[null](注意:堆栈跟踪已被过滤。使用 --verbose 查看整个跟踪。) groovy.lang.MissingMethodException:没有方法签名:静态 grails.plugin.databasemigration.MigrationUtils.dataSourceNameWithSuffix() 适用于参数类型:(null) 值:[null] 在 _DatabaseMigrationCommon_groovy$_run_closure1.doCall(_DatabaseMigrationCommon_groovy:37) 在 DbmGenerateGormChangelog$_run_closure1.doCall(DbmGenerateGormChangelog:23) 错误 执行脚本时出错 DbmGenerateGormChangelog:groovy.lang.MissingMethodException:没有方法签名:静态 grails.plugin.databasemigration.MigrationUtils.dataSourceNameWithSuffix() 适用于参数类型:(null) 值:[null]

    ==============

    我删除了 1.3.2,重述了 GGTS,然后安装了更早的版本,甚至回到了 1.2.1,然后又回到了 1.2.2,但没有任何变化。看起来我可能不得不尝试使用新的工作区,看看我是否可以让 1.2.2 再次工作。 Rgds,约翰

    【讨论】:

    • 仅供参考。导出应用程序,删除 dbm 插件,重命名应用程序并关闭 GGTS。使用新工作区打开 GGTS,导入应用程序,添加 dbm 插件 1.2.2。现在我可以像以前一样运行 dbm-* 脚本了。
    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 2023-03-17
    • 2013-02-12
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2013-08-30
    相关资源
    最近更新 更多