Verhindern, dass Django SQLite-Datenbank beim Pushen nach Heroku überschrieben wird

Lesezeit: 2 Minuten

Ich habe eine Django-Anwendung, die eine große Datenmenge in ihren Modellen speichert. Das Problem ist, dass bei jeder Bereitstellung auf Heroku, auch wenn es sich um eine kleine Änderung handelt, die Remote-Datenbank mit den korrekten Daten mit der lokalen Datenbank mit Dummy-Daten überschrieben wird.

Szenario:

Ich habe eine db-Datei my_db was abgelegen ist. Wenn ich jetzt zu Heroku drücke, habe ich gerade git add > git commit nur die Dateien mit den Änderungen und nicht das gesamte Projekt. Mein Problem liegt in der Tatsache, dass die entfernte Datenbank irgendwie immer noch mit lokalen Daten überschrieben wird.

Gibt es eine Möglichkeit, dies zu verhindern?

Heroku bietet kein persistentes Dateisystem.

Die meisten Heroku-Anwendungen, an denen ich gearbeitet habe, verwenden PostgreSQL für ihre Datenbank, daher ist dies kein Problem. Aber SQLite ist nur eine Datei, die sich irgendwo in einem Verzeichnis befindet, sodass jedes Mal, wenn Sie Ihre Datenbank bereitstellen, verloren geht.

Die einfachste Lösung ist wahrscheinlich die Migration von SQLite zu PostgreSQL, das von Heroku (und in Django) sehr gut unterstützt wird und nicht bei jeder Bereitstellung Daten verliert.

Wenn Sie fest zu SQLite verpflichtet sind, haben Sie möglicherweise einige andere Optionen:

  • Sichern Sie Ihre Datenbankdatei vor jedem Push und stellen Sie sie nach dem Push wieder her.
  • Fügen Sie Ihre Produktionsdatenbank zu Ihrem Git-Repository hinzu, damit sie zusammen mit Ihrer Anwendung bereitgestellt wird (beachten Sie, dass ich dies nicht empfehle).
  • Viele Benutzer Verwenden Sie Amazon S3, um andere Arten von Assets zu speichern. Möglicherweise können Sie ein ähnliches Verfahren mit Ihrer Datenbank verwenden, obwohl ich vermute, dass dies einige sehr erhebliche Sicherheitsrisiken mit sich bringen wird.

  • Wie machen Sie Option 2, nämlich das Hinzufügen Ihrer Produktionsdatenbank zu Ihrem Git-Repository?

    – Henry Zhu

    23. April 2016 um 6:07 Uhr

  • @devhaven.herokuapp.com, ich rate dringend davon ab, aber Sie würden einfach Ihre Datenbankdatei wie jede andere Datei zu Ihrem Repository hinzufügen und sicherstellen, dass Sie Änderungen daran bei Bedarf festschreiben. Beachten Sie, dass diese Option eine besonders schlechte Idee ist, wenn Sie beabsichtigen, die Datenbank auf Heroku zu ändern: Ich glaube nicht, dass Sie dort Aktualisierungen vornehmen können, und das vergängliche Dateisystem könnte immer noch ein Problem darstellen. Es würde ziemlich gut funktionieren, wenn Sie es beispielsweise als schreibgeschützte Einstellungsdatenbank verwenden würden. Bitte erwägen Sie ernsthaft, zu PostgreSQL (oder einer anderen unterstützten Client-Server-Datenbank) zu migrieren.

    – Chris

    23. April 2016 um 12:03 Uhr

Sie sollten die db-Datei hinzufügen .gitignorieren

  • Das ist eine gültige Antwort. Haben Sie jedoch eine Idee, warum es immer noch alle meine Dateien überschreibt?

    – Newtt

    19. Mai 2014 um 13:10 Uhr

  • Ich kann nur raten, da ich Heroku nicht kenne oder wie Sie Ihre Bereitstellung eingerichtet haben. Auch wenn Sie die lokale db-Datei nicht hinzufügen oder übergeben, sieht es so aus, als gäbe es noch eine Version davon in Ihrem Repository. Wenn Codeänderungen über einen Checkout bereitgestellt werden, überschreibt diese DB-Datei Ihre Produktions-DB

    – Tor der Hölle

    19. Mai 2014 um 14:00 Uhr

1002740cookie-checkVerhindern, dass Django SQLite-Datenbank beim Pushen nach Heroku überschrieben wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy