2012-03-27 18 views
1

Ich habe ein Problem mit der Erweiterung. Mein Django Projekt hat myapp Modul/Anwendung. Mein Projekt verwendet den Süden, um die Schema-Migrationen durchzuführen. Auf localhost habe ich ./manage.py schemamigration myapp --initial ausgeführt, dann habe ich migrieren Befehl ausführen.django + south: Befehl migrieren erstellt keine Tabelle in der Datenbank

Aber wenn in der Produktionsumgebung ich migrate Befehl ausführen, erstellt dies nicht die entsprechende Tabelle (MyApp-Modelle) in der Datenbank.

Es ist seltsam, denn wenn ich migrate --list ausführen, hat myapp Migration und sie sind alle markiert (mit * Symbol).

Also, ich überlege, löschen myapp und neu von Grund auf neu (mit entsprechenden Migrationen). Gibt es eine bessere Lösung?

EDIT: Ich habe versucht, myapp zu löschen und es von Grund auf neu zu erstellen. Also ich habe auch Tabellen von myapp in der Datenbank (auf localhost und auf Produktionsserver) löschen, und schließlich i ausgeführt habe:

schemamigration myapp --initial Befehl auf localhost

migrate myapp Befehl auf localhost

migrate myapp 0001 --fake auf Produktionsserver

, aber South erstellt weiterhin nicht die Tabellen von myapp in der Datenbank des Produktionsservers.

+0

Warum nennst du 'migrieren ... --fake'? '--fake' bewirkt, dass South nur die Migration als erfolgreich markiert, aber das tatsächliche DB-Schema nicht berührt. – ilvar

Antwort

0

Wenn Sie Ihre Tabellen gelöscht haben, sollten Sie nicht --fake ausgeführt werden, es sei denn, Sie haben zuerst eine manage.py syncdb. Ohne Tabelle sollten Sie in der Lage sein, python manage.py migrate myapp auszuführen und damit fertig zu sein (oder eine manage.py syncdb). Die erste Migration, die von --initial erstellt wird, enthält Tabellenanweisungen.

--fake sagt explizit Süden nichts tun, aber vorgeben, es migriert (führte DB-Änderungen) und markieren Sie die Verlaufstabelle als solche.

+0

Also: ich lösche alle Tabellen (auf localhost und auf dem Produktionsserver) von myapp. Dann starte ich 'syncdb' oder' schemamigration --initial'. Dann stelle ich das Projekt bereit. Und dann? Es werden weiterhin keine Datenbanktabellen auf dem Produktionsserver mit dieser Methode erstellt. –

+0

@GiovanniChetilodicoafare, wenn alle Tabellen gelöscht werden, erstellt nur 'migrate' die Tabellen, wenn Sie die Migrationsdateien' 0001_initial' in den App-Verzeichnissen haben. Stellen Sie sicher, dass die Tabelle "south_migrationhistory" auf dem neuesten Stand ist und keine Einträge für Ihre Apps enthält, die Sie zurücksetzen möchten. –

+0

Ich habe mich entschieden, South nicht für myapp zu verwenden, weil ich die Modelle von myapp nicht geändert habe. Mit dem Ausführen von Syncdb auf dem Produktionsserver habe ich das Problem gelöst. Ich werde South für myapp verwenden, wenn ich models.py ändere und ich muss Migrationen machen. Danke für die Hilfe. –

0

Ich weiß es ein bisschen spät, aber hatte das gleiche Problem, und ich fand, dass das Problem war, dass meine manage.py auf die falsche Einstellungsdatei daher falsche DB zeigte. Stellen Sie sicher, dass manage.py auf die richtige Einstellungsdatei verweist und dass Migrationen an die richtige Datenbank vorgenommen werden. Dies kann auftreten, wenn Sie mehrere manage.py-Dateien oder mehrere Einstellungsdateien verwenden.

1

Wenn Sie aus Versehen oder absichtlich eine Tabelle in Ihrer DB gelöscht haben und versuchen, ./manage migrate myapp auszuführen Dies wird die abgelegte Tabelle in Ihrer DB nicht erstellen. Weil South nicht mit deiner DB in Berührung kommt.

Falls Sie Ihre Tabelle neu erstellen möchten. Migrieren Sie Ihr Schema auf eine frühere Version und migrieren Sie es zuletzt. Bitte verwenden Sie den folgenden Code entsprechend

manage.py migrate myapp 0002 --fake 
manage.py migrate myapp 

Hinweis: 002 ist Ihre vorherige Migration Version.

Verwandte Themen