【问题标题】:inconsistent migration history when changing a django app's name更改 django 应用程序名称时不一致的迁移历史记录
【发布时间】:2016-10-04 07:01:14
【问题描述】:

我正在尝试重命名我的 django 网站中的一个应用程序。还有另一个应用程序依赖于它及其 mysql 表。我检查了两个应用程序中的所有文件并将旧名称的实例更改为新名称。

但是,现在我在尝试执行迁移时遇到此错误消息:

File "/Users/Limor/anaconda/lib/python2.7/site-packages/Django-1.10a1-py2.7.egg/django/db/migrations/loader.py", line 287,
 in check_consistent_history
    migration[0], migration[1], parent[0], parent[1],
django.db.migrations.exceptions.InconsistentMigrationHistory: 
  Migration manual_tasks.0001_initial is applied before its dependency beta.0001_initial

我找不到此问题的解决方案,如果我试图注释掉引发异常的特定函数,我会在以后遇到相关问题。我注定要失败,还是有办法解决它?

谢谢!

编辑:

旧名称是version_1,新名称是beta,另一个依赖它的应用程序是manual_tasks。

代码结构如下:

~/website/
|-- .ebextensions
|   `-- django.config
|-- project
|   |-- __init__.py
|   |-- local_settings.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- db.sqlite3
|-- manage.py
|--beta
|   |-- __init__.py
|   |-- admin.py
|   |-- apps.py
|   |-- local_settings.py
|   |-- models.py
|   |-- tests.py
|   |-- urls.py
|   |-- views.py
|   |-- migrations
|       |-- __init__.py
|       |-- 0001__initial.py
|   |-- static
|       |-- assets
|       |-- images
|   |-- templates
|--manual_tasks
|   |-- __init__.py
|   |-- admin.py
|   |-- apps.py
|   |-- models.py
|   |-- tests.py
|   |-- urls.py
|   |-- views.py
|   |-- migrations
|       |-- __init__.py
|       |-- 0001__initial.py
|   |-- static
|       |-- assets
|       |-- images
|   |-- templates
`-- requirements.txt

希望它更有意义!

【问题讨论】:

  • 问题出在您的迁移依赖项中,但很难从这些信息中弄清楚。用旧的应用名称更新您的问题新的应用名称,并指出项目结构现在的样子
  • 是的,这实际上让事情变得更加清晰,并且有希望,因为只有一次迁移。只需编辑迁移文件即可修复。如果它们不是很长,你能把它们贴出来。如果它们很长,则仅发布依赖部分和显示外键关系的字段等
  • 另外,如果数据库中没有任何数据。或者数据不重要,你可以删除数据库,删除迁移文件,不到一分钟再做一遍
  • 谢谢!这很有帮助,我能够弄清楚:)

标签: python mysql django rename


【解决方案1】:

对于它的价值,如果它对处于类似情况的任何人有帮助:

我在将正确数据库从生产服务器复制到测试实例以模拟其上的数据时遇到了这个问题,所以我知道数据库是正确的。我还没有深入研究为什么这会使迁移变得异常,但是(我想强调我可以轻松地对此进行试验,因为我已经备份了数据)只是清空了 django_migrations表并运行python manage.py migrations <app_name> --fake 为我解决了这个问题。

【讨论】:

    【解决方案2】:

    就我而言,当我检查django_migrations 表的内容时,我可以确认InconsistentMigrationHistory 异常试图引发的问题。因此,依赖应用程序的应用迁移有一个0001_initial 记录,而“独立”应用程序没有记录。

    我什至发现我试图在 上运行 django-admin migrate 的应用程序的名称并不重要。这让我相信在任何迁移操作实际发生之前,表上会发生某种健全性检查。

    删除数据库记录并首先调用依赖项的migrate 子命令将删除块。两者都需要--fake-initial 标志,因为所有Models 都已经存在。

    【讨论】:

      【解决方案3】:

      我认为您在将应用重命名为 beta 之前已经运行了名为 version_1.0001_initial 的迁移。您只需要更新表 django_migrations 中的数据库记录,并使用以下 SQL 语句将旧应用迁移重命名为新名称:

      UPDATE django_migrations SET app = 'beta' WHERE app = 'version_1';
      

      【讨论】:

      猜你喜欢
      • 2020-03-26
      • 1970-01-01
      • 2015-07-19
      • 2021-08-16
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多