gpt4 book ai didi

grails - 在 Grails 中进行数据库迁移的良好工作流程是什么?

转载 作者:行者123 更新时间:2023-12-04 17:02:10 24 4
gpt4 key购买 nike

我想用 database-migration用于数据库迁移的 grails 插件。当我第一次启动 Grails 应用程序时,所有数据库表都是自动创建的。我的 DataSource.groovy 中的生产设置是:

production {


dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost/myapp?useUnicode=yes&characterEncoding=UTF-8"
username = "test"
password = "test"
dialect = org.hibernate.dialect.MySQL5InnoDBDialect
properties {
validationQuery = "select 1"
testWhileIdle = true
timeBetweenEvictionRunsMillis = 60000
}
}
}

在我的 config.groovy 我设置:
grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']

当我向域类添加属性时,我需要调整更改日志文件。
在这种情况下进行数据库迁移的最佳方法是什么?添加或删除列时必须执行哪些步骤?

最佳答案

您可能知道,dbcreate指令是 not recommended生产用途:

You can also remove the dbCreate setting completely, which is recommended once your schema is relatively stable and definitely when your application and database are deployed in production.



所以请记住,您需要删除它(或设置为 'none' )。

初始基线工作流
  • 定义当前状态
  • 从更改日志创建数据库或标记为最新
  • 设置配置选项

  • 第一步是获取 changelog以反射(reflect)当前状态。如果您有一个现有的数据库,您希望使用它来定义基线。否则,使用 GORM 来定义表。

    这些命令将为您的数据库生成基线。另外我选择使用 groovy DSL 格式而不是 liquibase XML,因为 readability .

    现有数据库

    如果您已经有一个包含数据的生产数据库,那就有点棘手了。您将需要从您的 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

    这里 environment是您要比较的数据库, meaningful name应该以某种方式反射(reflect)正在应用的更改(可能是 JIRA 问题 key 、版本号或描述)。
    --add标志将插入 include声明于 changelog.groovy .

    如果您已配置 updateOnStart ,那么你就完成了!否则,要手动处理更新,请重用以下命令:
    grails [environment] dbm-update

    实时调频
  • 插件文档 - Getting Started
  • 插件文档 - General Usage
  • Confile 上面的回答指向一个很好的 tutorial详细介绍手动更改更改日志
  • Liquibase 文档 - Changesets (使用 XML 格式,但有助于理解概念)
  • 关于grails - 在 Grails 中进行数据库迁移的良好工作流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13988514/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com