2010-05-16 3 views
24

Ich habe South auf meinem Projekt für eine Weile verwendet, aber ich habe vor kurzem eine große Menge an Entwicklung und veränderte Entwicklungsmaschine und ich denke, etwas versaut in dem Prozess. Das Projekt funktioniert einwandfrei, aber ich kann keine Migrationen anwenden. Jedes Mal, wenn ich versuche, eine Migration beantragen ich die folgenden Zurückverfolgungs erhalten:South Migration Fehler: NoMigrations Ausnahme für django.contrib.auth

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. 

Ich bin nicht mit Süd erfahren und ich habe diesen Fehler nicht vorher getroffen. Die einzige hilfreiche Erwähnung, die ich online über diesen Fehler finden kann, ist für Pre-0.7 denke ich und ich bin auf South 0.7. Ich lief 'easy_install -U South', nur um sicherzugehen.

+0

Haben Sie syncdb zuerst, um sicherzustellen, dass die Southmigrationhistory Tabellen dort sind? Oder haben Sie einen DB-Dump importiert, als Sie die Maschine verschoben haben? –

+0

Außerdem sollte django.contrib.auth keine Migrationen verwenden (es sei denn, Sie tun etwas, um es selbst zu hacken). Haben Sie manuell ein Migrationsverzeichnis für contrib.auth erstellt? –

+0

Ich habe eine syncdb gestartet. Die Datenbank ist dieselbe Datenbank wie ich nur eine SQLite-Datenbank für die Entwicklung verwende. Für den zweiten Punkt, siehe meine Lösung unten. – danpalmer

Antwort

26

Ich löste das Problem.

Natürlich können Sie South nicht verwenden, um die Migrationen für die Apps, die Teil von Django sind, zu machen, wie "Auth", also wusste ich nicht, warum es versuchte.

Ich erkannte, dass ich für eine Weile eine andere App innerhalb meines Projekts namens Auth hatte. Ich muss versucht haben, dies zu einem gewissen Zeitpunkt zu migrieren, bevor ich es umbenannte und damit alles vermasselt habe.

Ich entfernte die Migrationshistorie Einträge aus der Datenbank für diese App und alles war in Ordnung.

+0

Ich hatte das gleiche Problem, aber mit Kommentaren App. Vielen Dank. – zerofuxor

+0

Ran in das gleiche mit Nachrichten app nur heute. – Jyrsa

+1

Sie können South für Apps verwenden, die wie Auth ein Teil von Django sind, und es macht manchmal Sinn. Bitte sehen Sie meine Antwort unten. Ich bin nicht sicher, was zu tun ist, wenn die angenommene Antwort nicht korrekt ist, vielleicht können Sie Ihre Antwort bearbeiten, um meine korrekte Antwort zu enthalten? – mrooney

43

dieses Weggehen hier für zukünftige Googler

ich vor kurzem in diese Ausnahmen lief mit einem meiner eigenen Anwendungen heute nicht ein contrib ein.

Nach einem wenig Kopf-Kratzen bemerkte ich, dass irgendwie die Datei ...

app/migrations/__init__.py 

... gelöscht worden ist, was bedeutet, Python, die dir als ein Modul etc etc. importieren kann nicht

+2

Ja. Lief wie am Schnürchen. – mlissner

+2

Danke, es hat mir auch geholfen. – akozin

+2

Für mich war ein inkohärenter Zustand zwischen registrierten Migrationen in die Datenbank und dem Entfernen des "Migrations" -Verzeichnisses. Das Hinzufügen von 'migrations' und seiner' __init __. Py' löste das Problem. – gipi

1

Ich hatte auch das gleiche Problem, aber das ist mit der Root-Anwendung passiert. Ich entdeckte, dass dies aufgrund einer leeren models.py in meinem Projekt root aus früheren Entwicklung war. Ich vermute, dass dieses Problem auch bei Projektanträgen auftreten kann.

1

Sie können Migrationen mit integrierten Modulen durchführen, und dies ist auf jeden Fall sinnvoll für Datenmigrationen, beispielsweise zum Löschen aller Benutzernamen, Entfernen ungültiger E-Mails und so weiter.

Im Fall eines Benutzers von django.contrib.auth.models, verwenden Sie einfach: ORM [ ‚auth.User‘]

5

Ich hatte auch das gleiche Problem, und am Ende Ich reparierte diese durch Löschen alle Zeilen aus der Tabelle "south_migrationhistory" und führen Sie den folgenden Befehl vom Terminal aus.

python manage.py reset south 

Diese answer erklären, wie Süd-Migrationsgeschichte zurückzustellen.

Edit:

Von Django 1.5 ab reset Befehl wird nicht funktionieren. Stattdessen müssen Sie flush verwenden.

python manage.py flush 

Um mehr über zu verstehen, was diese bündig stackoverflow answer lesen tun wird.

+1

Beachten Sie, dass der Befehl "reset" in Django 1.5 durch "flush" ersetzt wurde, obwohl flush bei einzelnen Tabellen nicht funktioniert. Dazu müssen Sie diesen Port des alten Reset verwenden: https://github.com/gregmuellegger/django-reset – shacker

0

Ich habe den gleichen Fehler, aber nicht für ein Django-Modul, aber für ein Modul, das Teil meines virtualenv war. Ich habe nicht verstanden, wie South eine Migration für dieses Modul hätte durchführen können, da es wirklich keine Migrationen gab. Dann erinnerte ich mich, dass ich die Datenbank von einem Test-Env kopiert hatte, das eigentlich derselbe sein sollte. Aber es stellte sich heraus, dass das andere env eine etwas andere Version des Moduls hatte, die tat eine Migration haben. Ich löschte die betreffende Zeile aus der South Migration History (da es sowieso ein Test-Env war).

10

Ich lief in diesen nach Filialen und App-Versionen swithcing, und beschlossen, die App zu entfernen, die jetzt

./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) 
+0

Dies ist auch eine schnelle Lösung für, wenn Sie nur eine einzelne Apps Migrationen löschen möchten anstatt/Spülen ganz nach Süden. – andyzinsser

+0

Awesome dies löste mein Problem, obwohl ich nicht das OP hehe Prost – NeoVe

0

Ich hatte ein ähnliches Problem mit django.contrib.admin keine Migrationen vom south_migrationhistory Tisch hatten nicht lass mich meine Migrationen laufen lassen. Ich löste es, indem ich django.contrib.admin in settings.INSTALLED_APPS deaktivierte

Verwandte Themen