1

Ich entwickle eine kleine Webanwendung mit Django und Elasticbeanstalk. Ich habe eine EB-Anwendung mit zwei Umgebungen (Staging und Produktion) erstellt, eine RDS-Instanz erstellt und sie meinen EB-Umgebungen zugewiesen.Django Migrationsprozess für Elasticbeanstalk/Mehrere Datenbanken

Für die Entwicklung verwende ich eine lokale Datenbank, da die Bereitstellung in AWS ziemlich lange dauert.

Allerdings habe ich Probleme mit den Migrationen. Da ich alle paar Minuten lokal entwickle und teste, habe ich unterschiedliche Migrationen lokal und in den beiden Umgebungen.

Sobald ich die aktuelle Version der Anwendung in einer bestimmten Umgebung bereitgestellt habe, schlägt die "manage.py migrate" meistens fehl, weil Tabellen bereits existieren oder nicht existieren, obwohl sie dies tun sollten (weil eine andere Umgebung bereits die Tabellen).

Also fragte ich mich, wie man mit dem Migrationsprozess umgeht, wenn mehrere Umgebungen für die Entwicklung, Bereitstellung und Produktion mit einigen allgemeinen und einigen exklusiven Datenbankinstanzen verwendet werden, die nicht immer die gleiche Struktur aufweisen?

Sollte ich die Migrationsdateien aus dem Code-Repository und der eb-Bereitstellung ausschließen und makemigrations & nach jeder Bereitstellung migrieren? Soll ich Migrationen nicht automatisch mit den .extensions-Optionen ausführen und alle Migrationen manuell über eine der Instanzen anwenden?

Welche Methode wird für die Verwendung derselben Django-Anwendung mit unterschiedlichen Datenbankinstanzen in verschiedenen Umgebungen empfohlen?

Antwort

1

Scheint, dass Sie die Tabelle oder die Migrationen zu einem bestimmten Zeitpunkt möglicherweise gelöscht haben.

Wenn Sie Makemigrationen ausführen, erstellt django Migratins und wenn Sie migrieren, erstellt es die Datenbank, die in der Einstellungsdatei angegeben ist.

Eine Sache ist, wenn Sie weiterhin Migrationen erstellen und es nicht in einer bestimmten Datenbank ausführen, ist es absolut in Ordnung. Wann immer Sie zu Datenbanken wechseln und Migrationen ausführen, wird es damit zurechtkommen, da jede Datenbank den Punkt speichert, bis zu dem die Migrationen in der Tabelle django-migrations bisher ausgeführt wurden und nur die nächsten Migrationen starten.

Um Ihr Problem zu lösen, können Sie alle Datenbanken und Migrationsdateien löschen und neu starten, wie Sie vielleicht gerade testen. Es wird alles gut gehen, bis Sie eine Migration oder eine Datenbank in einem beliebigen Server löschen.

Wenn Sie wertvolle Daten haben, sollten Sie in Migrationsdateien und Tabellen gehen, um Dinge zu analysieren und zu verwalten.

+0

Aber das ist genau das, was ich meine. Zu Entwicklungs- und Testzwecken darf ich irgendwann eine Tabelle löschen (oder etwas anderes machen). Und ich müsste auch die gleichen Transaktionen auf die anderen DBs anwenden, um Fehler zu vermeiden, wenn ich den Migrationsordner in der Elastic Beanstalk-Umgebung implementiere. Tut es weh, die Migrationsdateien zu ignorieren und jedes System seine eigenen Migrationen behalten zu lassen? – wuser92

+0

Sie können eine Tabelle löschen, aber keine Operationen direkt in der Datenbank ausführen. Mach es durch Django ORM. Angenommen, Sie möchten eine Tabelle löschen, sollten Sie dieses Modell löschen und die Migration durchführen. Wenn Sie es dann einzeln auf jedem Server migrieren, werden Sie kein Problem mehr haben. – sprksh

+0

Ich habe keine elastischen Bohnenstangen verwendet. Aber ja, das ist normal. Sie ignorieren die Migrationsdateien und haben auf jedem Server separate Migrationen (Entwicklung, Produktion, Testen). Normalerweise, wenn Sie git verwenden, setzen Sie migrations/in .gitignore. und so werden die Migrationsdateien auf jedem Server separat generiert. – sprksh

Verwandte Themen