您可能知道,dbcreate
指令是不建议 http://grails.org/doc/latest/guide/conf.html#dataSource生产用途:
您还可以删除dbCreate
完全设置,一旦您的模式相对稳定,并且当您的应用程序和数据库部署在生产中时,建议您这样做。
因此请记住,您需要删除它(或设置为'none'
).
初始基线工作流程
- 定义当前状态
- 从更改日志创建数据库或标记为最新
- 设置配置选项
第一步是获取changelog
以反映当前状态。如果您有一个现有数据库,您希望使用它来定义基线。否则,使用 GORM 定义表。
这些命令将为您的数据库生成基线。另外,我选择使用 groovy DSL 格式而不是 liquibase XML,因为可读性 http://www.w3.org/People/Bos/DesignGuide/readability.html.
现有数据库
如果您已经有了一个包含数据的生产数据库,那就有点棘手了。您将需要从 grails 环境访问数据库或其副本。如果您操作副本,您将需要将更新应用回您的生产(并可能将其作为计划中断进行管理)。
命令是:
grails [environment] dbm-generate-changelog changelog.groovy
...在哪里environment
(可选)指定数据库定义的 dev/test/prod/custom 环境。
接下来,根据变更日志将数据库标记为“最新”:
grails [environment] dbm-changelog-sync
然后,如有必要,将数据库重新应用到生产中。
新数据库
如果您没有现有数据库(或不关心):
grails dbm-generate-gorm-changelog changelog.groovy
然后,从变更日志创建数据库:
grails [environment] dbm-update
配置
您已经正确设置了选项:
grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
这些选项只是意味着插件将在应用程序启动时尝试将更改应用到数据库。
开发流程
- 更改域
- 生成变更日志以识别差异
- (备份和)更新数据库
现在您已经拥有了最新的数据库,并且您正在消除对域类的更改,添加新的并更改验证属性。
每次您想要记录更改时,您都希望将 GORM 类与数据库中存在的类进行比较,并创建一个新的更改日志文件来记录差异:
grails [environment] dbm-gorm-diff [meaningful name].groovy --add
Here environment
是您要比较的数据库,并且meaningful name
应该以某种方式反映正在应用的更改(可能是 JIRA 问题密钥、版本号或描述)。
The --add
标志将插入一个include
中的声明changelog.groovy
.
如果你已经配置了updateOnStart
,那么你就完成了!否则,要手动处理更新,请重复使用命令:
grails [environment] dbm-update
RTFM
- 插件文档 -入门 http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/gettingStarted.html
- 插件文档 -一般用法 http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/generalUsage.html
- 上面的 Confile 回答很好tutorial http://wpgreenway.com/posts/grails-db-migration-tutorial/详细介绍了更改日志的手动更改
- Liquibase 文档 -变更集 http://www.liquibase.org/documentation/changeset.html(使用 XML 格式,但对于理解概念很有用)