Daten aus dem Produktions System exportieren - GeoMatDigital/django-geomat GitHub Wiki

Der Artikel unterteilt sich in zwei Teile: einmal den Export von aktuellen Daten aus der Produktions-Datenbank und den Import der Daten in eine lokale Entwicklungsumgebung.

Export

Um mit Daten aus dem Produktionssystem zu arbeiten, müssen diese erstmal exportiert werden. Da das Deployment aktuell mit Hilfe von Dokku geschieht, begibt man sich mit Hilfe des Befehls dokku enter geomat in den GeoMat Docker Container. Nach dem Befehl landet man in der Shell des Docker Containers.

Dokku exportiert automatisch alle nötigen Umgebungsvariablen, wodurch man sofort mit dem Export beginnen kann.

python manage.py dumpdata stein --indent 4 --exclude auth --exclude contenttypes > $(date +"%Y%m%d")_geomat_dump.json

Die ausgegebene JSON-Datei wird mit 4 Leerzeichen pro Ebene eingerückt. Es werden ausschließlich Daten aus der App stein exportiert und alle Datenbankeinträge, die zu auth und contenttypes gehören ignoriert. Letztere führen sonst zu Problemen beim Import der Daten. Der Output wird in eine Datei gespeichert, welche das aktuelle Datum trägt wie z.B., 20170417_geomat_dump.json.

Zum Schluss muss die Datei noch aus dem Docker Container rauskopiert werden. Mit Hilfe von docker ps lässt sich die Container ID erfahren und mit Hilfe von docker cp kopiert man die Datei auf das Host-System.

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                          PORTS                   NAMES
[...]
12345678abcd        dokku/geomat:latest          "/start web"             9 weeks ago         Up 9 weeks                                              geomat.web.1
[...]

$ docker cp 12345678abcd:/app/20170417_geomat_dump.json .

Nun muss die Datei nur noch auf den lokalen Rechner kopiert werden. Dies geschieht z.B. mit rsync oder der eigenen Methode der Wahl.

Import

Die beiden lokalen Docker Container (django und postgres) müssen gestartet sein, damit der Import funktionieren kann.

$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
defg12345678        djangogeomat_django     "/entrypoint.sh /star"   About an hour ago   Up About an hour    0.0.0.0:8000->8000/tcp   djangogeomat_django_1
hijk98765432        djangogeomat_postgres   "/docker-entrypoint.s"   About an hour ago   Up About an hour    5432/tcp                 djangogeomat_postgres_1

Der vorher erstellte oder runtergeladene Dump (in diesem Beispiel: 20170417_geomat_dump.json) muss in das aktuelle Verzeichnis kopiert werden. Am Besten befindet man sich im Projektverzeichnis django-geomat. Die Datei muss nicht in den lokalen Docker Container kopiert werden.

Mit Hilfe von python manage.py loaddata kann der Dump in die lokale Datenbank reingeladen werden.

$ docker-compose -f dev.yml run django python manage.py loaddata 20170414_geomat_dump.json 
Postgres is up - continuing...
Installed 123 object(s) from 1 fixture(s)

Unter Windows muss unter Umständen noch der -d Parameter eingefügt werden:

$ docker-compose -f dev.yml run -d django python manage.py loaddata current_dump.json

Das wars. Solange keine Fehler auftraten, sollten die Daten nun vorhanden sein.