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?
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
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
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