Während der Entwicklung eines Django-Projekts kann es vorkommen, dass einige Pakete und Module entfernt wurden und dementsprechend die Modelle aus diesen Paketen nicht mehr verwendet wurden. Gleichzeitig erlaubt Ihnen der Anwendungsmigrations-Squash jedoch nicht, diese Pakete zu entfernen, da Migrationen viele zirkuläre Abhängigkeiten aufweisen. Infolgedessen wird das Entfernen unnötiger Pakete zu einer ziemlich schwierigen Aufgabe. Da die Auflösung solcher Abhängigkeiten zu einer nicht trivialen Aufgabe wird. Für mich war ein so unangenehmes Paket Django CKEditor, das fast überall vorhanden war. Infolgedessen blieb dieses Paket aufgrund von Migrationen ziemlich lange in der Liste der Anforderungen.txt, obwohl es tatsächlich überhaupt nicht auf der Website verwendet wurde.
Um solche Migrationsabhängigkeiten zu beseitigen, müssen Sie alle Migrationen entfernen, ohne jedoch die Inhalte zu entfernen, die durch diese Migrationen erstellt wurden. Erstellen Sie dann eine neue Erstmigration und wenden Sie sie auf die Datenbank an, auch ohne neue Änderungen an der Datenbankstruktur vorzunehmen.
Wie kann man es machen?
- Bringen Sie alle Migrationen mit dem falschen Parameter in den Nullzustand zurück. Das bedeutet, dass die Migrationsinformationen entfernt werden, der Inhalt sich jedoch nicht ändert.
python manage.py migriert App Zero --fake
- Entfernen Sie Migrationsdateien aus dem Repository
git rm "app/migrationen/*"
- Erstellen Sie eine neue Migrationsdatei
python manage.py makemigrations-App
- Führen Sie eine neue Migration mit der gefälschten Option aus, um die Migrationsinformationen zur Datenbank hinzuzufügen, aber die Datenbankstruktur nicht zu ändern.
python manage.py Migrations-App --fake
Fazit
Verwenden Sie diesen Ansatz beim Einrichten von Migrationen sorgfältig, und erstellen Sie am besten eine neue Migration auf einem Testserver, um sicherzustellen, dass Sie alles richtig machen und die Datenbank nicht beschädigt wird.
In diesem Fall können Sie auf dem Testserver eine neue Migration erstellen und sie dem Git-Repository hinzufügen.
Dann müssen Sie auf dem Produktionsserver Folgendes tun.
python manage.py migrate app zero --fake git pull python manage.py migrate app --fake
Für Django empfehle ich Timeweb VDS-Server .