Falls ein EXTENSION-Profil zum Installieren eines Produkts verwendet wurde, können Upgrade steps des Generic Setup Tools verwendet werden, um Migrationsskripte zu verwalten.
Dabei kann das Generic Setup Tool die Versionsnummer entweder aus der version.txt
-Datei im Wurzelverzeichnis des Produkts auslesen oder aus einer metadata.xml
-Datei im Installationsprofil. Entsprechend wurde das Default
-Profil von vs.policy
ergänzt um src/vs.policy/vs/policy/profiles/default/metadata.xml
:
<?xml version="1.0"?>
<metadata>
<description>Policies for www.veit-schiele.de</description>
<version>1.3</version>
</metadata>
Die Upgrade steps werden dann in src/vs.policy/vs/policy/configure.zcml
registriert:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="vs.policy">
...
<!-- Upgrade step for the migration -->
<genericsetup:upgradeStep
sortkey="1"
source="1.0"
destination="1.1"
title="Upgrade from 1.0 to 1.1"
description="Fixes the front page title"
profile="vs.policy:default"
handler=".upgrades.v1_0_to_v1_1"
/>
...
</configure>
Hier wird die Aktualisierung von Version 1.0 auf 1.1 definiert, wobei die Funktion v1_0_to_v1_1()
aufgerufen wird.
Die Funktion ist definiert in src/vs.policy/vs/policy/upgrades.py
:
from Products.CMFCore.utils import getToolByName
def v1_0_to_v1_1(portal_setup):
portal_url = getToolByName(portal_setup, 'portal_url')
portal = portal_url.getPortalObject()
front_page = portal['front-page']
front_page.setTitle('Welcome to Veit Schiele communication design')
Die Aktualisierung von 1.1 auf 1.2 teilt sich in zwei Teile auf, v1_1_to_v1_2a
und v1_1_to_v1_2b
. Dabei sorgt sortkey
für die richtige Reihenfolge bei der Aktualisierung über mehrere Versionen:
<genericsetup:upgradeSteps
sortkey="2"
source="1.1"
destination="1.2"
profile="vs.policy:default"
>
<genericsetup:upgradeStep
title="Upgrade titles"
description="Fix all other titles"
handler=".upgrades.v1_1_to_v1_2a"
/>
<genericsetup:upgradeStep
title="Upgrade site title"
description="Fixes the portal title"
handler=".upgrades.v1_1_to_v1_2b"
/>
</genericsetup:upgradeSteps>
Falls eine große Anzahl von Migrationen durchlaufen werden soll, kann sich ein spezielles Extension
-Profil empfehlen:
<genericsetup:registerProfile
name="1.2_to_1.3"
title="Migration profile for veit-schiele.de 1.2 to 1.3"
description=""
directory="profiles/migrations/v1_2_to_v1_3"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
<genericsetup:upgradeStep
sortkey="3"
source="1.2"
destination="1.3"
title="Upgrade from 1.2 to 1.3"
description="Runs a migration profile"
profile="vs.policy:default"
handler=".upgrades.v1_2_to_v1_3"
/>
Zunächst wird das Extension
-Profil in profiles/migrations/v1_2_to_v1_3
für das Interface Products.CMFPlone.interfaces.IMigratingPloneSiteRoot
registriert, wodurch das Profil nicht beim Erstellen der Site oder in Plone’s Website-Konfiguration zum Hinzufügen/Entfernen von Produkten angezeigt wird. Anschließend wird noch ein upgrade step registriert, der das Profil angibt.
Schließlich muss noch das Verzeichnis src/vs.policy/vs/policy/profiles/migrations/v1_2_to_v1_3
und darin die entsprechenden XML-Dateien erzeugt werden.