让我感到困惑。假设我们有一个带有 South 迁移的 Django 项目。目前,生产项目版本为A
, version in development B
。现在让我们假设版本B
已安装到生产中:
- 安装新代码
- 跑
./manage.py syncdb && ./manage.py migrate
- 重新启动网络服务器并感到高兴。
下一个假设:版本B
根本不起作用。它在开发中进行了,但在生产中没有,因此必须回滚。这就是我必须遗漏的地方。我看到两种可能性:
- 旧代码重新安装。现在,向南向后迁移是合适的,但是,这是不可能的,因为旧代码不包含返回所需的所有最新迁移。
- 我们首先回滚数据库更改,然后重新安装旧代码。但是,我们如何知道哪个迁移是 version 的最新版本
A
?由于一个项目可以轻松计算几十个应用程序,因此您需要为每个应用程序找出哪个迁移站属于旧版本,然后分别迁移每个应用程序,然后回滚代码并希望获得最好的结果。
在这两种情况下,我都缺少关键信息,第一种情况下的迁移代码或<->
第二种情况下的“迁移版本”关系。我在这里想念什么?
PS:是的,我知道我可以从备份中恢复数据库,这就是我实际所做的。我想知道整个数据库迁移理论如何适应回滚。