grails - 我可以在 Grails 项目之外运行数据库迁移插件脚本吗?

标签 grails debian database-migration

我一直在使用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 应用程序的根目录中。

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

最佳答案

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

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

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

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

关于grails - 我可以在 Grails 项目之外运行数据库迁移插件脚本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7248025/

相关文章:

hibernate - 如何关闭Grails中所有域类的 hibernate 延迟加载?

debian - 为什么MeeGo的RPM优于DEB?

sql - 对于 Liquibase,使用唯一的 <createIndex> 和使用具有唯一约束的 <column> 之间有区别吗?

python - 如何停止、重新启动或启动在 Debian 系统上的 virtualenv 中运行的 Gunicorn?

oracle - PostgreSQL 分页以及行号索引

grails - grails database-migration-即使没有域模型更改,也会生成更改日志

jquery - 类型错误 : 'undefined' for select2 in grails gsp

grails - 同一页上有多个表和可排序列的问题

rest - 未找到嵌入变量的 Grails URLMapping

linux - 什么是基于 Debian 的发行版?