Migrieren von Plone 3.3.5 auf Plone 4.1.5

  • Hallo,

    ich bin neuerdings für ein Plone Projekt zuständig, dass unter Plone 3.3.5 läuft. Ich würde das Projekt gerne auf version 4.1.5 oder gar 4.2 upgraden. Dabei dürfen allerdings keine Fehler auftreten, bzw. der Lifebetrieb darf nicht gestört werden.
    Mein Ansatz wäre nun, erstmal Plone 3.3.5 auf einem anderen Rechner aufzuspielen(schon passiert) und von dort Testweise auf 4.1.5 migrieren.
    Ich bin nun erstmal wie folgend vorgegangen:

    1. Wie gesagt Plone 3.3.5 standalone installiert
    2. Das kommando /bin/buildout.cfg -n verwendet
    => Die Folge war, dass etwas passiert ist... das Kommando wurde also ausgeführt ohne Fehler zu werfen. Was nun passiert ist weis ich leider nicht, und ich glaube auch nicht, dass das Projekt nun wirklich ein upgrade auf version 4+ erfahren hat.

    Meine Fragen hierzu: Ist dies wirklich der "way to go"? Das "-n" sollte ja eigentlich nach der neusten version suchen? Oder würdet ihr mir einen anderen Ansatz empfehlen?

    Eine andere Idee wäre ja auch z.B. version 4.1.5 zu installieren und die alten Daten aus dem alten Projekt direkt in das neue Projekt zu migrieren. Dies scheint ja wahrscheinlich irgendwie über Data.fs zu funktionieren. Mehr weis ich dazu leider noch nicht.

    Also bin erstmal über jede Hilfe dankbar wie ich das Ganze nun angehen soll.

  • Hallo nochmals,

    ich habe nun folgendes Tutorial gefunden:
    http://plone.org/documentation/….0/buildout-3-4

    Ich habe die standard buildout.cfg, die sich nach installieren von Plone 3.3.5(standalone) im Grundverzeichnis befindet wie angegeben verändert.

    Nun bekomme ich aber noch folgenden Fehler:


    Zugegebener Maßen habe ich Teil 1 des Tutorials erstmal ignoriert, da ich der Beschreibung bzgl. Python 2.6 nicht ganz folgen konnte. Könnte jemand das ganze vielleicht etwas "Idiotensicherer" formulieren?

  • Habe nun python 2.6 verwendet für das Ausführen von bootstrap. Nun bekomme ich massiv viele Fehler der folgenden Art:

    Leider überhaupt keine Ahnung woher diese Fehler kommen. Sieht irgendwie nach Problemen mit dem Zeichensatz aus, oder was kann das sein? Oder Python fehlt immernoch? : / ?

    Einmal editiert, zuletzt von Don83 (11. Juni 2012 um 15:22)

  • Ok,

    ich bin das Problem jetzt doch ganz anders angegangen. Ich habe Plone 4.2 installiert. Dann den Inhalt von /var/filestorage aus dem alten Projekt das unter 3.3.5 lief in /var/filestorage der version 4.2 kopiert.
    Der Inhalt sieht wie folgend aus:
    Data.fs Data.fs.index Data.fs.lock Data.fs.tmp dls glf hep

    dls, glf und hep sind verschiedene websites.
    Ich habe dann einen "neuen" buildout durchgeführt und anschließend localhost:8080 geöffnet.
    Ich konnte dann tatsächlich eine Automatisierte-Migration durchführen. Das habe ich dann auch getan. Nun sieht das ganze aber leider wie folgend aus:

    [Blockierte Grafik: http://imageshack.us/photo/my-images/16/plone.png/]

    Wenn ich die 3 webseiten (hep,dls,glf) anklicke bekomme ich Fehlermeldungen wie z.B. hier nach dem anklicken von dls:

    Ich wäre ja doch schon sehr froh drüber wenn mir hierbei jemand helfen könnte das ganze richtig hinzubiegen.

  • Hallo Don83,

    dieses Unterforum ist leider sehr träge, da fast alle sich an die Englischen Listen wenden und nur sehr wenige Profies hier mitlesen und auch noch antworten. Ab und zu muss man einfach mal ein zwei Tage warten.

    Zu deiner Frage:
    Die Migration von Plone Daten ist Trivial, der Upgrade eines Plone-Setupups ist es leider nicht immer, aber Plone 3.3 sollte es aber eigentlich sehr viel einfacher gehen, als vorher.


    1. Schritt Analyse des alten Setups:
    * ist es schon buildout Basiert (wenn ja perfekt)
    * ist das buildout unter Versionsverwaltung? (ist für Pflege deutlich besser)
    * welche Zusatz-Produkte wurden installiert (nur dann kann eine Migration sauber funktionieren)
    * wie sieht die Zope-Konfiguration aus, (bei Buildout wird die generiert, ansonsten gibt es in den Instanzen ein etc/zope.conf oder etc/zeo.conf)
    * welche Storage-Layer wurden benutzt (File-Storage, Blob-Storage, ggf. RelStorage, ...) (du hast zusätzliche Filestorages, die müssen wo abgebildet sein)
    2. Errichtung einer Migrations-Instanz:
    * niemals auf einer Life-Instanz ungeprüfte Updates durchführen
    * Beste Startbasis ist der UnifiedInstaller von Plone (aktuell 4.2.rc2) da der alles mitbringt (Python, Versions-Pins, ...)
    * externen Version-Pin, ggf. aktualisieren (im buildout die Version.cfg auskommentieren und die externe Referenz auf 4.2-latest änderen und einkommentieren
    * Kopie des File-Storage und des Blob-Storage (die Migration erstmal auf dieser Kopie testen)
    * Anpassung des Buildout an das existierende Setup, (Zusatz-Produkte, Instanz-Konfiguration, Speicherpfade)
    * ggf. zusätzliche Debug und Development-Tools in einer debug-instance installieren (Um ggf. die Migration besser überwachen zu können)
    3. Setup der Migrations-Instanz
    * wenn buildout Konfiguration gem. Schritt 2 fertig, dann buildout durchführen, dabei niemals die option -n für newest verwenden, sonst kannst du im schlimmsten fall das System nicht mehr verwenden danach. Plone und Zope arbeiten mit sogenannten "Knowen Good Versions" jede Abhängigkeit ist mit einer explizieten Version.
    * Warnungen des buildouts ignorieren, wenn das buildout nicht abbricht ist es in Ordnung, das sind alles nur informationen für geübte Entwickler
    * debug-instance im Vordergrund starten (./bin/debug-instance fg), Warnungen studieren, ob bei Zusatzprodukten Meldungen kommen
    * Startet die instanz sauber, einloggen und in der ZMI schuaen ob alles vorhanden ist
    * via ZMI/portal_migration für jede Plone-Site eine Test-Migration durchführen. dabei die Debug-Ausgaben auf der Kommandorzeile beobachten.
    4. Bei problemloser Test-Migration, ein neues Life-System aufsetzten, Migration durchführen und altes System ersetzten.

    Ich hoffe das hilft, wenn nicht einfach nochmal melden.

    Gruss Pumukel

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller

  • Hallo,
    erstmal danke für die Antwort. Also ich bin nun wie folgend vorgegangen:

    1. Plone 4.2.rc2 installiert

    2. Den filestorage aus dem alten Projekt in Plone 4.2 kopiert und mit chmod -R plone:plone * Rechte vergeben.

    3. Dann habe ich mich der buildout.cfg zugewand. Hierbei habe ich die Standardbuildout von version 4.2 verwendet und wie folgend verändert:

    3.a) folgendes habe ich hinzugefügt. Dies entspricht der filestorage Struktur des alten Projekts. Zusätzlich noch blobstorage hinzugefügt.

    Bisher habe ich an der buildout nurnoch die folgende Zeile
    #Products.PloneFormGen==1.6.0
    "ein"-kommentiert und auf
    Products.PloneFormGen==1.7.0
    geändert.

    So. Es handelt sich bei mir um drei webseiten. Eine davon ist relativ simpel gehalten. Bei der einen webseite klappt schonmal das migrieren. Also ich gehe auf ip:8080/manage klicke die Seite an und wie gesagt das migrieren wirft keinen Fehler.
    Dann navigiere ich aber die Seite direkt an also ip:8080/hep/hep und ich bekomme folgenden Fehler:

    Zitat

    AttributeError("'TTWViewlet' object has no attribute 'getIconFor'",) (Also, the following error occurred while attempting to render the standard error message, please see the event log for full details: 'TTWViewlet' object has no attribute 'getIconFor')

    Kann hierzu leider auch nichts bei google finden, auser einen Italienischen Beitrag. Weis jemand eventuell bescheid woher dieser Fehler stammt bzw. wie ich ihn beheben kann?

    Abgesehen davon benutzen die anderen Seiten den flowplayer. Ist jetzt aber nicht so das Problem. Diesen kann ich zur Not beim migrieren auch rauslassen.

    edit: Anbei noch das traceback zum vorherigen Fehler:

    Einmal editiert, zuletzt von Don83 (13. Juni 2012 um 14:45)

  • Hallo,

    also der Fehler sieht so aus, das du eine eingestellte View für ein Objekt hast, das auf eine View-Class geht die du nicht zur verfügung hast. Da du sagst das Seiten den Flowplayer benutzen kann das natürlich das sein. Bitte installier alle Add'ons die im Orginal sind auch in der Migration.

    Außerdem schau bitte in der ZMi ob du in portal_skins/custom etwas hast, sowie unter portal_view_customizations bei content TTW Anpassungen hast.

    Gruss Pumukel

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller

  • Danke für die Antwort. Das Problem mit dem Flowplayer ist nun gelöst denke ich. Bis auf PloneLingua denke ich habe ich nun alle Produkte ordentlich migriert.
    Der Fehler mit dem Viewlett kommt immernoch.
    Unter portal_skins/custom habe ich sehr viel content. Also z.B. Bilder zu Kopfzeile usw..

    Unter portal_view_customizations wurde folgendes verändert:

    Inwieweit stellen denn diese customizations ein Problem dar, bzw. wie kann ich vorgehen um die Probleme damit zu verändern bzw. zu beheben?
    Bei der ersten template bekomme ich übrigens den folgenden Fehler wenn ich die template öffne:

    Zitat


    Errors
    Macro expansion failed <type 'exceptions.NameError'>: name 'path_expression' is not defined

  • Hallo,

    also die Customizations sind dein Problem. Hier hat jemand versucht Design-Anpassungen Through The Web (TTW) zu implementieren. Dies ist zwar möglich und zum mal kurz etwas auszuprobieren auch gut, aber für ein Produktiv-System absolut gefährlich.

    View-Customizations bestehen in der regel aus zwei Elementen der View-Class einem Python-Skript und einem Page-Template, in dem Element siehst du aber nur die Page-Templates. Wenn jetzt Funktionen der View-Class aufgerufen werden, die aber bei einem Update sich geaendert haben, funktioniert das nicht mehr. Deswegen sollte man Anpassungen immer in einem eigenen Theme-Package machen, dann kann man sowohl eigene View-Classes erstellen als auch bei einem Update viel einfacher die Unterschiede sehen.

    Der Fehler ist normal da ab Python 2.6 andere Techniken wegen dem Restricted Python eingestezt werden, damit niemand das ystem korrumieren kann.

    Gruss Pumukel

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller

  • Hallo,
    danke für die Rückmeldung. Ich habe sowas befürchtet. Gibt es nun einen halbwegs erfolgsversprechenden Ansatz um das Problem zu beheben oder kann man davon ausgehen, dass die Migration unmöglich ist?

  • Hallo,

    entschuldige bitte die lange Zeit für eine Antwort.

    Natürlich ist damit die Migration nicht gescheitert, wobei man aber erstmal spezifischer werden muss. Du sprichst nur von einer Migration, es sind aber zwei Sachen die du machst, du hast ein Upgrade des Systems und der Add'ons durchgeführt und eine Migration der Daten angefangen, die Migration ist nicht gescheitert, das kann man sogar sehr leicht belegen, häng einfach an eine der nicht funtionierenden Seiten ein /base_view an und du siehst das alle Daten vorhanden sind, nur die Darstellung (ein TTW Add'on) nicht funktioniert. Ich würde frech behaupten die Migration ist bereits erfolgreich durchgeführt, dein Upgrade ist es noch nicht.

    Wie muss man jetzt vorgehen um es zu lösen, es gibt zwei Möglichkeiten, eine jetzt schnelle die beim nächsten Upgrade das gleiche Problem wiederverursacht oder eine langsame aber bessere.
    Die schnelle ist genau die gleichen Anpassungen die im Alten System TTW gemacht wurden nachzuvollziehen und im neuen System von Scratch zu machen. Wie gesagt das wäre die dummste aber schnellste Lösung.

    Zweite und besserer Weg wäre wie schon angedeutet eigene Add'ons im File-System zu erstellen udn die Änderungen da einzubauen. Da es nach meinem Verständnis bei dir nur um Darstellungsanpassungen geht, sollte das eine eher triviale aber zeitraubende Arbeit sein (ein Profi, benötigt wahrscheinlich ein paar Tage, ohne Erfahrung kann das Wochen bis Monate dauern).

    Gruss Pumukel

    PS: nicht den Kopf hängen lassen, man bekommt das hin, stell dir das mal in einem anderen CMS vor, da würde garnichts mehr funktionieren.

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller