首页 > 解决方案 > 在 Django 中恢复迁移的具体目的是什么,没有它是否安全?

问题描述

在我们的 Django 项目中,我们通常已经实现了reverse_func,以便能够回滚迁移。

class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.RunPython(forwards_func, reverse_func),
    ]

我们这样做是因为一些团队成员在以前的项目中这样做过,但我们从未真正质疑过这样做的必要性。

但是随着时间的推移,我们似乎从不使用回滚机制。

我们的数据库是一个 Docker 容器的卷。当我们打开一个不同的分支时,我们通常用一个先前的dev版本替换卷,这样我们就只重新应用最新的迁移。

因此,我的问题是:我们是否误解了 的目的reverse_func?- 它在 dev 中的目的是什么?- 它在产品中的目的是什么?

没有它们工作是否安全?

标签: djangomigrationdatabase-migration

解决方案


在开发环境reverse_func 中不是很重要,如果出现问题,您可以简单地删除整个数据库并重新创建它

但对于生产环境,它将帮助您在发布错误后将数据库恢复到工作状态

在生产环境中运行后forwards_func,您可能会更改您的数据库,并且可能会发现这是一个糟糕的更改,并且您的网站不再正常工作。请注意,您的数据库中可能有一些新数据,因此如果您使用备份,您可能会丢失这些数据

在给定的场景中,有一个reverse_func非常有帮助,你reverse_func会将数据库返回到以前的工作状态,你可以简单地重新部署你的软件的以前版本

请注意,有时reverse_func可能是一个空函数。只是告诉 django 这种迁移是可逆的

您并不总是使用 a reverse_func,但如果出现问题(甚至一年一次),您可以看到编写它的重要性


推荐阅读