发布失败后,在Heroku上运行反向Django迁移

时间:2020-02-26 09:52:13

标签: django heroku django-migrations

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

  • 在给定的发行版中,有多个迁移(它们可以在不同的应用程序中)
  • 某些迁移会失败,但第一个迁移不会失败

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

在Heroku上发布命令失败的情况下,是否有一种简单的自动运行Django运行反向迁移的简单方法?

事务在这里无济于事,因为可能会有多个迁移(多个应用程序),并且Django在单独的事务中运行每个迁移。

1 个答案:

答案 0 :(得分:0)

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

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

代码在运行迁移之前存储迁移的状态,并且在发生任何异常的情况下会恢复为该状态。它还会在migrate步骤中检查所有迁移是否可逆。

它尚未经过良好的测试,但我将继续努力从中创建一个库,以方便其他人使用。