Ошибка миграции на юг: исключение NoMigrations для django.contrib.auth

Я использовал South в своем проекте некоторое время, но недавно я провел огромное количество разработок и сменил машину для разработки, и я думаю, что в процессе что-то испортилось. Проект работает нормально, но я не могу применить миграции. Всякий раз, когда я пытаюсь применить миграцию, я получаю следующую трассировку:

danpalmer:pest Dan$ python manage.py migrate frontend
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager
    utility.execute()
  File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 222, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/management/commands/migrate.py", line 102, in handle
    delete_ghosts = delete_ghosts,
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 182, in migrate_app
    applied = check_migration_histories(applied, delete_ghosts)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 85, in check_migration_histories
    m = h.get_migration()
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 34, in get_migration
    return self.get_migrations().migration(self.migration)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 31, in get_migrations
    return Migrations(self.app_name)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 60, in __call__
    self.instances[app_label] = super(MigrationsMetaclass, self).__call__(app_label_to_app_module(app_label), **kwds)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 88, in __init__
    self.set_application(application, force_creation, verbose_creation)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 159, in set_application
    raise exceptions.NoMigrations(application)
south.exceptions.NoMigrations: Application '<module 'django.contrib.auth' from '/Library/Python/2.6/site-packages/django/contrib/auth/__init__.pyc'>' has no migrations.

У меня нет опыта работы с South, и я не встречал эту ошибку раньше. Единственное полезное упоминание об этой ошибке, которое я могу найти в Интернете, относится к версии до 0,7, я думаю, а я нахожусь на South 0,7. Я запустил «easy_install -U South», чтобы убедиться.


person danpalmer    schedule 16.05.2010    source источник
comment
Вы сначала синхронизировали базу данных, чтобы убедиться, что там есть таблицы southmigrationhistory? Или вы импортировали дамп БД при перемещении машины?   -  person Steve Jalim    schedule 17.05.2010
comment
Кроме того, django.contrib.auth не должен использовать миграции (если вы не делаете что-то, чтобы взломать его самостоятельно). Вы вручную создали каталог миграции для contrib.auth?   -  person Steve Jalim    schedule 17.05.2010
comment
Я сделал syncdb для начала. База данных такая же, как я просто использую базу данных SQLite для разработки. Что касается второго пункта, см. мое решение ниже.   -  person danpalmer    schedule 19.05.2010
comment
У меня было такое же исключение с приложением taggit. Но это случилось, когда я использовал дампы базы данных с другого сервера: на сервере была версия 0.11.2, а у меня более старая 0.9.3. После pip install -U django-taggit проблемы ушли.   -  person Tomasz Gandor    schedule 15.04.2014


Ответы (8)


Оставьте это здесь для будущих пользователей Google.

Недавно я столкнулся с этим исключением с одним из моих собственных приложений, а не с вкладом.

Немного почесав голову, я заметил, что каким-то образом файл...

 app/migrations/__init__.py

... был удален, что означает, что python не может импортировать каталог как модуль и т. д. и т. д.

person sjh    schedule 07.07.2010
comment
Спасибо, мне тоже помогло. - person akozin; 10.02.2014
comment
Для меня было бессвязное состояние между зарегистрированными миграциями в базу данных и удалением каталога migrations. Добавление migrations и его __init__.py решило проблему. - person gipi; 16.10.2014
comment
Я был в противоположной ситуации. Я удалил файлы миграции *.py, оставив только версии *.pyc. Среда миграции South или Django 1.7+ не распознает файлы миграции *.pyc. Также проверьте настройку MIGRATION_MODULES в модуле настроек Django. - person Rockallite; 26.08.2015

Я решил проблему.

Очевидно, что вы не можете использовать South для миграции приложений, являющихся частью Django, таких как «auth», поэтому я не знал, почему он пытается это сделать.

Я понял, что какое-то время у меня было другое приложение в моем проекте под названием auth. Должно быть, я пытался перенести это в какой-то момент, прежде чем переименовывать, и поэтому все испортил.

Я удалил записи истории миграции из базы данных для этого приложения, и все было в порядке.

person danpalmer    schedule 19.05.2010
comment
Столкнулся с тем же с приложением сообщений только сегодня. - person Jyrsa; 30.10.2012
comment
Вы МОЖЕТЕ использовать South для приложений, которые являются частью Django, таких как аутентификация, и иногда это имеет смысл. Пожалуйста, смотрите мой ответ ниже. Я не уверен, что делать, если принятый ответ неверен, может быть, вы можете отредактировать свой ответ, чтобы он содержал мой правильный ответ? - person mrooney; 24.05.2013

Я только что столкнулся с этим после смены веток и версий приложения и решил удалить приложение, в котором теперь не было миграций, из таблицы south_migrationhistory.

./manage.py dbshell

mysql> SELECT * FROM south_migrationhistory WHERE app_name = 'social_auth';

104 | social_auth | 0001_initial...                                                                   
105 | social_auth | 0002_auto__add_unique_nonce...


mysql> DELETE FROM south_migrationhistory WHERE app_name = 'social_auth';
Query OK, 2 rows affected (0.00 sec)
person Tom Gruner    schedule 07.02.2014
comment
Это также быстрое решение, когда вы хотите удалить только одну миграцию приложений вместо сброса / сброса всего юга. - person andyzinsser; 11.06.2014
comment
Круто, это решило мою проблему, хотя я не ОП, хе-хе, приветствую - person NeoVe; 17.05.2015

У меня также была такая же проблема, и в конце я исправил это, удалив все строки из таблицы south_migrationhistory и выполнив следующую команду из терминала.

python manage.py reset south

Этот ответ объясняет, как сбросить историю миграции на юг.

Изменить:

Начиная с Django 1.5 команда reset не будет работать. Вместо этого вы должны использовать flush.

python manage.py flush

Чтобы узнать больше о том, что будет делать сброс, прочитайте этот ответ stackoverflow.

person Jinesh    schedule 14.06.2013
comment
Обратите внимание, что команда сброса была заменена на flush в Django 1.5, хотя flush не работает с отдельными таблицами. Для этого вам нужно будет использовать этот порт старого сброса: github.com/gregmuellegger/django-reset - person shacker; 27.08.2013

У меня также была такая же проблема, однако это произошло с корневым приложением. Я обнаружил, что это произошло из-за пустого models.py в корне моего проекта из более ранней разработки. Я подозреваю, что эта проблема может возникнуть и для проектных приложений.

person Dan Ward    schedule 01.09.2012

Вы можете выполнять миграцию на встроенных модулях, и это определенно имеет смысл для миграции данных, например, усекая все имена пользователей, удаляя недействительные электронные письма и так далее.

В случае пользователя из django.contrib.auth.models просто используйте: orm['auth.User']

person mrooney    schedule 04.01.2013

Я получил ту же ошибку, но не для модуля django, а для модуля, который был частью моего virtualenv. Я не понял, как юг мог выполнить миграцию для этого модуля, поскольку у него действительно не было никаких миграций. Затем я вспомнил, что скопировал базу данных из тестовой среды, которая должна была быть такой же. Но оказалось, что у другой среды была немного другая версия модуля, который был с миграцией. В итоге я удалил оскорбительную строку из южной истории миграции (так как в любом случае это была тестовая среда).

person Ciske    schedule 24.01.2014

У меня была аналогичная проблема с django.contrib.admin, который не позволял мне запускать мои миграции. Я решил это, отключив django.contrib.admin в settings.INSTALLED_APPS.

person mpaf    schedule 12.02.2014