Django 压缩迁移:NodeNotFoundError

Posted

技术标签:

【中文标题】Django 压缩迁移:NodeNotFoundError【英文标题】:Django squashed migrations: NodeNotFoundError 【发布时间】:2016-06-14 23:52:43 【问题描述】:

运行 Django 1.8.9。

我刚刚压缩了 3 个应用程序的迁移并进行了部署。当./manage.py migrate 运行时,我得到了这个:

django.db.migrations.graph.NodeNotFoundError: Migration app2.0001_squashed_0019 dependencies reference nonexistent parent node (u'app1', u'0001_squashed_0028')

app1.0001_squashed_0028 存在于磁盘上,迁移被替换。 Django 迁移系统应该拥有向前迁移所需的所有信息。

我能够通过以下方式解决该问题:

    将依赖于 app1.0001_squashed_0028 的 2 个新压缩迁移重命名为 *.bak, 运行迁移, 然后重命名 *.bak 文件, 并重新运行迁移。

迁移在本地和暂存中运行良好,所以我猜测发生这种情况的原因是因为生产尚未与预先压缩的迁移保持同步。

我发现了几个与 squashing 相关的问题单,但我不确定它们中的任何一个是针对同一个错误的。任何人都知道这是否是一个已知问题?我是不是做错了什么/有没有更好的方法来防止这种情况发生?

【问题讨论】:

【参考方案1】:

您对错误消息表示困惑,因为:

app1.0001_squashed_0028 存在于磁盘上,迁移被替换。 Django 迁移系统应该拥有向前迁移所需的所有信息。

不过,您是否在磁盘上看到文件并不确定。要了解 Django 了解的项目迁移,请使用 management command showmigrations

如果甚至没有列出您期望的迁移,那么这就是 Django 声称未找到迁移的原因。

【讨论】:

以上是关于Django 压缩迁移:NodeNotFoundError的主要内容,如果未能解决你的问题,请参考以下文章

Django 压缩迁移:NodeNotFoundError

压缩迁移 django 的最佳方法

django 如何知道已经运行了哪些迁移?

Django Migrate - 找不到父节点

Django系列12:Django模型关系

南迁移和 django 迁移有啥区别?