【问题标题】:Can I run database-migration plugin scripts outside Grails project?我可以在 Grails 项目之外运行数据库迁移插件脚本吗?
【发布时间】:2011-11-07 01:28:55
【问题描述】:

我在开发应用程序期间一直在使用Grails database-migration plugin,并且非常喜欢它的功能。 (Grails 1.3.7,数据库迁移 1.0)

问题: 我受到约束,所有部署都必须通过包含我的应用程序的 Debian 包进行。它将由另一组有能力的管理员安装,但不是任何意义上的程序员。因此,我无法按照典型工作流场景中的指示迁移数据库架构。

问题: 什么脚本/类/???我是否需要在包中捆绑或依赖才能执行命令:

grails -Dgrails.env=$TARGET dbm-update

grails -Dgrails.env=$TARGET dbm-changelog-sync

grails -Dgrails.env=$PROD dbm-diff $PROMOTION_ENV

来自我的 debian/postinst 脚本?

我尝试安装 Grails,使数据库迁移插件成为运行时依赖项,并包括 Dbm* 脚本……但没有成功。我最接近的是当我尝试运行其中一个脚本时,Grails 抱怨说我不在 grails 应用程序的根目录中。

这可以做到吗,或者任何人都可以提供一个好的替代方案,希望不会导致我需要学习一个全新的迁移隐喻?

【问题讨论】:

    标签: grails debian database-migration


    【解决方案1】:

    这三个脚本是相应 Liquibase 操作的包装器。有一些 Grails 特定的脚本,例如dbm-gorm-diff,它在你的代码和数据库之间创建一个变更日志,但这是一个开发者脚本,在这里不适用。

    所以我会选择直接的 Liquibase。调用更加冗长,因为您需要在命令行上指定连接信息(在 Grails 中,我可以为您从 DataSource 中获取该信息),但这应该很容易编写脚本。您只需要类路径中的 Liquibase jar 文件,它也可以轻松添加到脚本中。

    另一个缺点是您将使用传统的 Liquibase XML 而不是基于 Groovy 的迁移脚本,因此没有循环、if/then 检查等。但只要您有相当标准的迁移来运行它应该没问题。

    这是一种与使用插件不同的方法,但该插件支持基于 XML 的变更日志,因此您可以将在这些场景中生成的变更日志添加到您创建的变更日志中(如果这对您的工作流程有意义的话)。

    【讨论】:

    • 感谢您的快速回答!如果管理员出于某种原因(监控/审计)修改了生产模式,我试图避免由于天真地迁移我的模式而导致的意外行为。我想至少将迁移后的实际情况与迁移后的实际情况进行比较,并让管理员做出明智的选择。我想我可以在打包之前使用构建服务器(使用插件)生成的 XML 更改日志,然后从我的安装脚本中,使用 liquibase 来执行它。这就是我将根据您的反馈尝试的方法 - 再次感谢您
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2012-05-20
    • 2019-08-31
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多