【问题标题】:Not sure why django South is trying to run reverse migration不知道为什么 django South 试图运行反向迁移
【发布时间】:2012-05-04 13:40:48
【问题描述】:

当我运行 python manage.py migrate api 时,它会失败并显示“RuntimeError: Cannot reverse this migration。”

问题是,我不确定它为什么会尝试运行反向迁移?失败的文件是 0025,在 MySQL 数据库的 south_migrationhistory 表中没有提及。

知道为什么 South 会尝试使用此命令运行反向迁移吗?

谢谢!

编辑:

完整的堆栈跟踪是:

Running migrations for api:
 - Migrating forwards to 0026_auto.
 > api:0025_auto__chg_field_article_curator_response_comment__chg_field_article_cu
Traceback (most recent call last):
  File "manage.py", line 14, in <module> execute_manager(settings)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 459, in execute_manager utility.execute()
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv self.execute(*args, **options.__dict__)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute output = self.handle(*args, **options)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/management/commands/migrate.py", line 105, in handle ignore_ghosts = ignore_ghosts,
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/__init__.py", line 191, in migrate_app success = migrator.migrate_many(target, workplan, database)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 221, in migrate_many result = migrator.__class__.migrate_many(migrator, target, migrations, database)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 292, in migrate_many result = self.migrate(migration, database)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 125, in migrate result = self.run(migration)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 99, in run return self.run_migration(migration)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 86, in run_migration print self.run_migration_error(migration)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 286, in run_migration_error (self.format_backwards(migration), extra_info))
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 273, in format_backwards self.backwards(migration)()
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 57, in <lambda> return (lambda: direction(orm))
  File "/home/ubuntu/fakeapi/fakeapi/../fakeapi/api/migrations/0025_auto__chg_field_article_curator_response_comment__chg_field_article_cu.py", line 42, in backwards raise RuntimeError("Cannot reverse this migration. 'Image.article' and its values cannot be restored.")
RuntimeError: Cannot reverse this migration. 'Image.article' and its values cannot be restored.

【问题讨论】:

  • 这是您得到的唯一错误,还是有更多细节?您可能遇到了一个错误,然后它尝试回滚 - 但您只看到回滚错误。
  • 我很确定这是唯一相关的信息,我添加了完整的堆栈跟踪以防万一
  • 我相信它正在检查以验证是否可以逆转迁移。并且由于不可能引发错误。如果您错过了迁移,那将阻止反向迁移。只是一个想法。
  • @mtnpaul,错过迁移是什么意思?

标签: mysql django django-south


【解决方案1】:

遇到迁移错误,并尝试回滚。您可以暂时清理向后迁移,看看真正的错误是什么。

【讨论】:

  • 谢谢@ilvar,你能解释一下如何清理向后迁移吗?我在网上找不到任何信息
  • 只需注释掉backwards方法中的所有代码,并添加一个pass代替
  • 谢谢 ilvar,遇到了同样的问题。
猜你喜欢
  • 2017-06-26
  • 2014-10-29
  • 1970-01-01
  • 2011-08-14
  • 2012-05-18
  • 1970-01-01
  • 2015-10-07
  • 2012-08-06
  • 2012-08-13
相关资源
最近更新 更多