„Keine solche Tabelle“-Fehler auf Heroku, nachdem Django SyncDB bestanden wurde
Lesezeit: 4 Minuten
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.
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
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.
10171800cookie-check„Keine solche Tabelle“-Fehler auf Heroku, nachdem Django SyncDB bestanden wurdeyes
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