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.