django - 在 Django 中恢复迁移的具体目的是什么,没有它是否安全?
问题描述
在我们的 Django 项目中,我们通常已经实现了reverse_func
,以便能够回滚迁移。
class Migration(migrations.Migration):
dependencies = []
operations = [
migrations.RunPython(forwards_func, reverse_func),
]
我们这样做是因为一些团队成员在以前的项目中这样做过,但我们从未真正质疑过这样做的必要性。
但是随着时间的推移,我们似乎从不使用回滚机制。
我们的数据库是一个 Docker 容器的卷。当我们打开一个不同的分支时,我们通常用一个先前的dev
版本替换卷,这样我们就只重新应用最新的迁移。
因此,我的问题是:我们是否误解了 的目的reverse_func
?- 它在 dev 中的目的是什么?- 它在产品中的目的是什么?
没有它们工作是否安全?
解决方案
在开发环境reverse_func
中不是很重要,如果出现问题,您可以简单地删除整个数据库并重新创建它
但对于生产环境,它将帮助您在发布错误后将数据库恢复到工作状态
在生产环境中运行后forwards_func
,您可能会更改您的数据库,并且可能会发现这是一个糟糕的更改,并且您的网站不再正常工作。请注意,您的数据库中可能有一些新数据,因此如果您使用备份,您可能会丢失这些数据
在给定的场景中,有一个reverse_func
非常有帮助,你reverse_func
会将数据库返回到以前的工作状态,你可以简单地重新部署你的软件的以前版本
请注意,有时reverse_func
可能是一个空函数。只是告诉 django 这种迁移是可逆的
您并不总是使用 a reverse_func
,但如果出现问题(甚至一年一次),您可以看到编写它的重要性
推荐阅读
- c++ - 如何使用模板函数将字符串一般转换为另一种类型
- java - 共享缓冲区数组未跨线程正确更新
- android - prefixtext 更改 textInputlayout 高度并使其变得巨大
- sql - 为在另一列上具有相同值的分区中的每个前导行获取一行
- android - 获取美国格式的用户电话号码
- mqtt - 将 mosquitto_sub 的输出重定向到 .txt 文件并在每次更新时覆盖
- ruby - 我将如何使用 Ruby 在 Windows 中获取当前屏幕的方向?
- python - 如何使用 3D 训练数据构建二元分类器
- google-sheets - 将 Google Sheet 连接到 Photoshop
- remix - 无法使用@chainlink 验证智能合约