Django AWS Elastic Beanstalk migriert die Datenbank

7

Ich stelle ein Django-Projekt mithilfe von Elastic Beanstalk in AWS bereit und hänge bei der Migration der Datenbank fest.

Wo ich bin: Ich kann mein django-Projekt erfolgreich bereitstellen und die Seite über mysubdomain.elasticbeanstalk.com laden. Die Seite wird ohne Fehler geladen, bis ich zu einer Seite komme, die einen Datenbankaufruf durchführen muss. Ich bekomme dann einen Fehler wie relation "accounts_user" does not exist LINE 1: SELECT COUNT(*) FROM "accounts_user" , weil meine Datenbank nicht migriert wurde.

Was ich versucht habe: Ich habe schon einige Variationen ausprobiert. Glücklicherweise gibt es eine Fülle von Stackoverflow-Posts und ein paar Tutorials. Leider scheinen sie alle eine andere Version zu verwenden und was sie vorschlagen, trifft nicht auf mein Projekt zu.

Mir ist ziemlich klar, dass ich die Migration in einer foobar.config -Datei im Ordner .ebextensions/ ausführen muss. Hier ist die Basis von dem, was ich tun möchte:

%Vor%

In den Protokollen sehe ich, dass das Post-Deployment-Skript versucht hat zu laufen, aber es ist fehlgeschlagen. Ich erhalte keine weiteren Informationen über den Fehler. Das einzige, was ich sehe, ist etwas wie "ERROR: 01_migrate post deployment script failed"

Ich finde heraus, dass ich die virtuelle Umgebung für den Befehl aktivieren muss, was sinnvoll ist. Von asdf versuche ich das:

%Vor%

Aber es funktioniert nicht. In der Tat, durch SSH finde ich heraus, ich habe nicht einmal einen / opt / python / Ordner, nur / opt / aws / und / opt / elasticbeanstalk /. Alle Tutorials und SO Fragen beziehen sich auf diesen Ordner, aber ich habe es nicht?

VERSIONEN: Python 3.4.1, Django 1.7.7, AWS CLI 3.2.1, Postgres 9.3

    
awwester 09.04.2015, 13:39
quelle

3 Antworten

10

Die container_commands werden NICHT innerhalb des Dockercontainers ausgeführt. Sie werden direkt auf der ec2-Instanz ausgeführt. Derzeit verwende ich docker exec , um die Migration durchzuführen. Da der betroffene Docker-Container afaik ist, habe ich den letzten gestartet, indem ich docker ps -a --no-trunc -q | head -n 1 verwende, um die Container-ID zu erhalten.

Am Ende sieht meine setup.config so aus

%Vor%

Ich hoffe, dass das auch Ihr Problem löst.

    
Sebastian Annies 10.04.2015, 16:10
quelle
10

Ich weiß, dass dies ein alter Post ist, aber ich möchte meine Antwort hier posten, da es ziemlich lange gedauert hat, bis ich herausgefunden habe.

Sebastian wies mich irgendwie in die richtige Richtung, aber das Problem bei diesem Ansatz ist, dass es vor der Bereitstellung ausgeführt wird (also migriert man den alten Code)

Sie können auch den Befehl files in ebextensions verwenden und eine Datei in / opt / elasticbeanstalk / hooks / appdeploy / post schreiben, aber dies wird auf jeder Instanz ausgeführt

Sie können diese beiden Dinge kombinieren:

%Vor%

Dadurch wird ein Post-Bereitstellungsskript im richtigen Verzeichnis und NUR auf dem Vorspann erstellt.

Das funktioniert wirklich gut für mich, aber sei gewarnt, die Hooks sind nicht dokumentierte Funktionen

    
nkhumphreys 22.01.2016 13:10
quelle
-2

Aktualisiere Informationen bezüglich der neuesten Version von Elastic Beanstalk.

Ich verwende 64bit Amazon Linux 2016.09 v2.3.3 running Python 3.4 .

Der folgende Befehl funktioniert für mich, ohne dass ich virtualenv aktivieren oder einen Post-App-Deploy-Hook erstellen muss.

%Vor%

Um zu beweisen, dass container commands in einer Post-Deploy-Phase ausgeführt wird, habe ich meine Modelle geändert, die aktualisierten Migrations-Scripts erstellt, die neue Version bereitgestellt und überprüft, ob die Datenbank erfolgreich migriert wurde: Erfolg !

    
ffleandro 20.04.2017 15:30
quelle