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

时间:2011-08-30 18:32:56

标签: 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应用程序的根目录中。

这可以做到,或者任何人都可以提供一个好的选择,希望不会让我需要学习一个全新的迁移隐喻?

1 个答案:

答案 0 :(得分:1)

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

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

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

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