20101231

So. Nach einigem Grübeln und Studieren müsste Linos erste Datenmigration jetzt klappen.

Unerwartetes Problem gestern war, dass South die Migration für das neue Feld Person.is_dsbe ins Verzeichnis von lino.modlib.contacts schreibt, weil er sich auf das app_label des Models basiert. Ich wäre ja einverstanden, wenn ich das mit ein wenig Handarbeit korrigieren könnte. Aber meine Versuche in diese Richtung funktionierten nur fast: ich kenne South nicht gut genug und müsste mein Problem erstmal auf der Mailingliste beschreiben. Aber das ist nicht evident.

Leichter war es, den Serializer in lino.utils.dpy zu schreiben, der mir ein Dump der Datenbank im dpy-Format erlaubt. Das ist ein vollkommen anderer Ansatz. Wenn ich ein Upgrade mit Änderungen in der DB-Struktur habe, sieht die Installationsanweisung wie folgt aus:

  1. Make a backup of your database

  2. Stop the running Lino processes:

    sudo /etc/init.d/apache2 stop
    sudo /etc/init.d/watch_tim stop
    
  3. Dump your data to a temporary local fixture:

    cd /usr/local/django/myproject
    python manage.py dumpdata --format dpy > fixtures/tmp.dpy
    
  4. Upgrade Lino:

    cd /var/snapshots/lino ; hg pull -u
    
  5. Depending on the changes it may be necessary to manually edit the tmp.dpy file.

  6. Create an empty DB and fill it from the dump:

    initdb_tim tmp
    

Ein evindenter Nachteil ist, dass bei großen Datenbanken mein System langsamer sein dürfte, weil ich alle Daten erst rausschreibe und dann wieder einlese.