【问题标题】:Run reverse Django migration on Heroku after release failure发布失败后在 Heroku 上运行反向 Django 迁移
【发布时间】:2020-06-10 03:49:27
【问题描述】:

我在 Heroku 上有一个正在运行的 Django 应用程序,迁移在发布时自动运行。虽然在大多数情况下这可以正常工作,但有时在以下情况下会出现问题:

  • 在给定版本中有多个迁移(它们可以在不同的应用中)
  • 有些迁移会失败,但不是第一次迁移

在这种情况下,manage.py migrate 将失败,因此 Heroku 不会完成发布,也不会部署新代码。这意味着代码在旧版本中,而数据库处于“介于新旧之间”的状态。

如果 Heroku 上的 release 命令失败,是否有一种简单的方法可以自动运行 Django 运行反向迁移?

事务在这里没有帮助,因为可能有不止一个迁移(多个应用程序)并且 Django 在单独的事务中运行每个迁移。

【问题讨论】:

  • 你看过devcenter.heroku.com/articles/…吗?据我所知,似乎没有“恢复”迁移的选项。
  • 我不相信“没有办法做到这一点”,最坏的情况是我可以编写自己的迁移命令,但我正在寻找一些更简单的方法。
  • 抱歉,我刚刚从谷歌快速搜索中获取了第一个相关结果。

标签: django heroku django-migrations


【解决方案1】:

由于我找不到任何现有的解决方案,因此我发布了我为解决此问题而编写的要点。

https://gist.github.com/pax0r/0591855e73b9892c28d3e3cdd15f4985

代码在运行迁移之前存储迁移的状态,并在出现任何异常时恢复到此状态。它还会在migrate 步骤期间检查所有迁移是否可逆。

它还没有经过很好的测试,但我会努力从它创建一个库,以便其他人使用。

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 2020-02-03
    • 2015-01-13
    • 1970-01-01
    • 2021-05-17
    • 2011-06-29
    • 2020-05-27
    • 2020-05-29
    相关资源
    最近更新 更多