【问题标题】:Grails deployment on production - manually db migration生产环境中的 Grails 部署 - 手动数据库迁移
【发布时间】:2015-03-06 07:11:36
【问题描述】:

我来自 python django 世界,通常我们的部署流程如下:

  1. tar/gz 我们的代码发布
  2. 在生产中解压
  3. 通过南手动运行数据库迁移
  4. 运行应用程序

Grails 与 python/django 有点不同,主要是因为最终产品是编译好的战争。我最大的问题是手动数据库迁移。我不想自动运行它,我看到的一个建议解决方案是使用dbm-update-sql 生成手动 sql 文件,但为了生成它,我需要我的本地数据库与生产数据库具有相同的版本 - 我不喜欢。

还有其他建议吗?在我看来,手动运行它的唯一方法是在机器上部署源代码并在那里运行dbm 命令。

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    我强烈建议不要将源代码部署到您的生产系统。因为,您想要手动控制数据库迁移,在 Grails 应用程序的正常流程之外,我建议您将 liquibase 作为独立工具使用。

    显然,由于您不想管理生产模式的副本以对此进行比较,这对您来说将是大量的手动工作(例如,使您的更改保持最新)。

    数据库迁移插件可用于创建您手动运行的 sql 脚本,但您确实需要一个生产模式来进行比较。我建议你走这条路,但你似乎反对这样做。

    【讨论】:

    • 我更喜欢手动的原因是错误处理,如果迁移失败会发生什么,我根本不希望加载战争,我希望它失败,另外万一失败我想要清除错误消息,不要去 catalina.out 中搜索它
    • 我似乎记得如果迁移失败,应用程序将停止加载,因此不会部署。在 Tomcat 的情况下,catalina.out 中会出现错误。同样,如果您想手动控制此操作,请考虑使用 Liquibase 作为独立工具(这是数据库迁移插件在内部使用的工具)。
    • 你知道正在使用哪个 groovy dsl 扩展吗?我找到了一个可能的候选人 - github.com/tlberglund/groovy-liquibase 但在阅读 burtbeckwith.com/blog/?p=1774 时,看起来插件正在实现自己的 dsl 解析器。看起来如果我想手动操作,那么我将不得不使用 xml 表示,真是太糟糕了。
    • 可以在这里查看插件的源码:github.com/grails-plugins/grails-database-migration
    • 很遗憾,我无法使用 Tim 的 DSL。我查看了它,但它不完整(虽然我最近没有检查过)并且有几个我现在忘记的问题使其与插件不兼容。
    【解决方案2】:

    您可以对生产数据库运行dbm-update-sql,它不会进行任何更改,因为就像所有的 -sql 脚本一样,它可以向您展示在真正迁移的情况下会做什么。为了安全起见,请创建一个无权进行任何更改的用户,并在您运行脚本时使用该用户。使用该用户信息和生产连接信息在 DataSource.groovy 中创建一个自定义环境,并在运行脚本时指定该环境。

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多