„Keine solche Tabelle“-Fehler auf Heroku, nachdem Django SyncDB bestanden wurde

Lesezeit: 4 Minuten

Benutzer-Avatar
Wadim Tikanow

Ich versuche, meine Django-Anwendung für Heroku bereitzustellen. Die Migrationen befinden sich in meinem lokalen Git. Wenn ich versuche:

git push heroku master
heroku run python manage.py syncdb

Es wendet die Migrationen an und fordert mich auch auf, einen Superuser zu erstellen, was ich erfolgreich tue. Jetzt ist die Anwendung betriebsbereit, aber wenn ich versuche, mich beim Django-Administrator anzumelden, wirft sie:

OperationalError no such table: user_user

Wenn ich es versuche

heroku run python manage.py makemigrations    
heroku run python manage.py migrate
heroku run python manage.py createsuperuser

Es wendet alle Migrationen an, erstellt jedoch kein Superuser-Throwing:

django.db.utils.OperationalError: no such table: user_user

So oder so kann ich meine Datenbank nicht auf Heroku einrichten und migrieren lassen.

Meine Datenbankeinstellungen sind:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

Mein Benutzermodell ist:

class User(AbstractUser):
    rating = models.PositiveIntegerField(default=settings.DEFAULT_USER_RATING)

Die Django-Version ist 1.7.1.

Wie bekomme ich meine Datenbanktabellen auf Heroku erstellt?

  • Ich verstehe deine Frage nicht. Du sagst das Laufen migrate wendet die Migrationen an. Nun, tun Sie das anstelle von syncdb, das sowieso veraltet ist.

    – Daniel Rosemann

    21. April 2015 um 8:31 Uhr

  • Ich habe die Frage aktualisiert, um klarer zu werden. Das Problem ist weder syncdb noch Migrationshilfe beim Einrichten der Datenbank auf heroku. Ich sehe immer noch “no such table: user_user”, wenn ich versuche, mich bei Django Admin anzumelden.

    – Wadim Tikanow

    21. April 2015 um 8:45 Uhr

  • Mögliches Duplikat der von Heroku erstellten Tabelle, aber wenn ich migriere, sagt er, dass dies nicht erstellt wurde

    – Ciro Santilli Путлер Капут 六四事

    13. Mai 2016 um 13:53 Uhr

Sie dürfen sqlite3 nicht auf Heroku verwenden.

sqlite speichert die Datenbank als Datei auf der Festplatte. Aber das Dateisystem in einem Heroku-Dyno ist nicht persistent und wird nicht zwischen Dynos geteilt. Also, wenn du es tust heroku run python manage.py migrate, Heroku startet einen neuen Dyno mit einer leeren Datenbank, führt die Migrationen aus und löscht dann den Dyno und die Datenbank. Der Dyno, auf dem Ihre Website ausgeführt wird, ist nicht betroffen und wird nie migriert.

Sie müssen eines der Heroku-Datenbank-Add-Ons verwenden. Es gibt eine kostenlose Stufe für Postgres. Sie sollten die Bibliothek dj-database-url verwenden, um Ihre Datenbankeinstellungen dynamisch aus den Umgebungsvariablen festzulegen, die Heroku festlegt.

Aus dem gleichen Grund müssen Sie dies auch tun manage.py makemigrations lokal das Ergebnis an git übergeben und dann an Heroku pushen.

  • Ich sehe jetzt. Danke Daniel.

    – Wadim Tikanow

    21. April 2015 um 9:15 Uhr

  • Ich hatte genau das gleiche Problem mit Lumen/Laravel. Lokal migriert und gesät, auf GitHub gepusht und dann funktionierte alles perfekt.

    – AnonymAngelo

    8. April 2019 um 19:09 Uhr

  • Ich hatte das gleiche Problem. Ich habe Einstellungen für postgreSql und ein Addon zu heroku dyno hinzugefügt. Es steht jedoch immer noch keine solche Tabelle …

    – Matej J

    10. August 2020 um 13:17 Uhr

  • Dies ist korrekt und wie gesagt sollte sqlite NICHT auf Heroku (oder irgendwo in der Produktion) verwendet werden. WENN Sie jedoch nur mit einer Test-Django-App spielen UND WENN Ihre lokalen Daten keine sensiblen Daten enthalten, können Sie Ihre lokale SQLite-DB-Datei festschreiben/pushen, und diese Daten werden angezeigt. Wie Daniel jedoch sagte, ist dies kurzlebig und wird nicht von Dyno geteilt. Es ist eine SCHLECHTE IDEE, aber es kann Spaß machen, wenn Sie Django lernen.

    – Aldo ‘xoen’ Giambelluca

    14. September 2020 um 8:53 Uhr

Sie können verwenden postgresql:

Im settings.py hinzufügen (am Ende der Datei):

# ie if Heroku server
if 'DATABASE_URL' in os.environ:
    import dj_database_url
    DATABASES = {'default': dj_database_url.config()}

Im requirements.txt hinzufügen:

dj-database-url 
psycopg2

Jetzt können Sie ausführen:
heroku run python manage.py migrate

  • psycopg2-binary funktioniert hier besser, da psycopg2 manchmal nicht ohne einige Abhängigkeiten kompiliert werden kann

    – Kacper Wikieł

    22. Oktober 2020 um 22:32 Uhr

Benutzer-Avatar
Ayan Kurmanbay

pip install django-heroku

Hinzufügen import django_heroku oben in der Datei settings.py

Ort django_heroku.settings(locals()) ganz unten settings.py

Es wird automatisch Ihre db konfigurieren. Sie können mehr über sie erfahren Webseite

  • Ich habe eine Menge anderer Lösungen gelesen, aber dies war die einzige, die es gelöst hat. Sieht so aus, als müsste DATABASE_URL irgendwie konfiguriert werden, um mit Heroku zu funktionieren. Überprüfen Sie die Originaldokumentation hier: pypi.org/project/django-heroku dj_database_url scheint auch zu funktionieren: pypi.org/project/dj-database-url

    – Casey L

    1. Juli 2021 um 22:05 Uhr

Welche Version von Django verwenden Sie ..?

Wenn Sie django>=1.7 verwenden, müssen Sie es ausführen migrate

Nach dem Hinzufügen von Modellen müssen Sie tun
python manage.py makemigrations dann python manage.py migrate

Wenn Ihr Projekt bereits Migrationen enthält, können Sie diese direkt ausführen python manage.py migrate Befehl.

Wenn Sie einen der oben genannten Schritte verpassen, tun Sie dies bitte.

1017180cookie-check„Keine solche Tabelle“-Fehler auf Heroku, nachdem Django SyncDB bestanden wurde

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

Privacy policy