[Setup] Migrating from Plone 2.1.3 to 2.5.5 in hopes of eventually hitting 3.1.7

Irfon-Kim Ahmad isa at dickeng.com
Fri Jan 30 16:42:55 UTC 2009


I'm having some trouble migrating our Plone 2.1.3 site to current.

At first, I tried migrating step by step.  Migrating from 2.1.3 to 2.1.4
worked fine.  However, I couldn't seem to get anywhere from there, and I
read some articles online that indicated both that 2.1.4 was a bit of an
evolutionary dead end and that I might as well try to go from 2.1.3 to
2.5.x.   When I say 2.5.x, I've tried 2.5, 2.5.1 and 2.5.5 for all of
these tests.  Currently, I am trying to go 2.1.3 -> 2.5.5, as many of
the 2.5.x change logs up to and including that version mention
improvements to the migration code.

My starting conditions are:

Zope: 2.9.3
Python: 2.4.3
Plone: 2.1.3
PIL: 1.1.5

I seem to get the same results whether I upgrade Plone to 2.5.5 first
then Zope to 2.9.8 or vice versa.  My current ending conditions are:

Zope: 2.9.8
Python: 2.4.3
Plone: 2.5.5
PIL: 1.1.5

This all shows up fine when I go to the Site Setup page within my Plone
site, which also seems to work fine.  However, when I go to the home
page of my site, I get an orange error box in the top left just below
the header bar saying:

Error exceptions.KeyError on here/portlet_navigation/macros/portlet:
'children'

An orange error box in the bottom left saying:

Error exceptions.AttributeError on
here/portlet_plone_navigation/macros/portlet: portlet_plone_navigation

...and no content at all in the body area.  (The title shows up in the
title bar fine.)

This happens even if I go to sub-pages.  All the content and pages show
up in the ZMI (I get the same results if I go to their View tab, but
they're there, anyway) if I go there and try to sort of browse the
content tree, so the data appears to still be in the database.

Any help would be greatly appreciated. I'm doing this on a clone of the
production server and I've backed up all the relevant folders six ways
to Sunday, so I should be able to roll whatever back to whenever and try
any experiments you'd like me to try.  I've tried a bajillion
combinations of things with always more or less the same end result
(well, exporting and importing failed in more fundamental ways), so I'm
a little at a loss now. 

When I did the migration from 2.1.3 to 2.5.5, these are the messages
that I got:

Result of the attempt...

Starting the migration from version: 2.1.3 Attempting to upgrade from:
2.1.3 Upgrade to: 2.1.4-rc1, completed Attempting to upgrade from:
2.1.4-rc1 Upgrade to: 2.1.4, completed Attempting to upgrade from: 2.1.4
Installed CMFPlacefulWorkflow. 
Upgrade to: 2.5-alpha1, completed
Attempting to upgrade from: 2.5-alpha1
Installed PasswordResetTool. 
Installed PlonePAS. 
Added directory view for plone_deprecated Added plone_deprecated to
Plone Default Added plone_deprecated to Plone Tableless Upgrade to:
2.5-alpha2, completed Attempting to upgrade from: 2.5-alpha2 Added
dragdropreorder.js to portal_javascipt Added KeywordIndex 'getEventType'
to portal_catalog. 
Modified existing home/index_html action Upgrade to: 2.5-beta1,
completed Attempting to upgrade from: 2.5-beta1 Added 'large_site'
property to site_properties. 
Updated icons for copy, cut, paste and delete Added setup_tool. 
Changed condition on action portal_membership/user/mystuff from:
"python: member and portal.portal_membership.getHomeFolder()" to:
"python:member and portal.portal_membership.getHomeFolder()" 
Changed url expression on action portal_membership/user/myworkspace
from: python: portal.portal_membership.getHomeUrl()+"/workspace" to:
python:portal.portal_membership.getHomeUrl()+"/workspace" 
Changed condition on action portal_membership/user/myworkspace from:
"python: member and portal.portal_membership.getHomeFolder() is not
None" to: "python:member and portal.portal_membership.getHomeFolder() is
not None" 
Changed url expression on action portal_membership/user/myworkspace
from: python:portal.portal_membership.getHomeUrl()+"/workspace" to:
string:${portal/portal_membership/getHomeUrl}/workspace
Changed condition on action portal_membership/user/favorites from:
"python: member and hasattr(portal.portal_membership.getHomeFolder(),
"Favorites")" to: "python:member and
hasattr(portal.portal_membership.getHomeFolder(), "Favorites")" 
Changed condition on action
portal_actions/document_actions/addtofavorites from: "python: member and
portal.portal_membership.getHomeFolder() is not None" to: "python:member
and portal.portal_membership.getHomeFolder() is not None" 
Changed condition on action portal_actions/folder_buttons/cut from:
"python:portal.portal_membership.checkPermission("Delete objects",
object)" to: "python:checkPermission("Delete objects", object)" 
Changed url expression on action portal_actions/object/folderContents
from: python:((object.isDefaultPageInFolder() and
object.getParentNode().absolute_url()) or folder_url)+'/folder_contents'
to: string:${globals_view/getCurrentFolderUrl}/folder_contents
Changed url expression on action
portal_actions/site_actions/accessibility from: string:
${portal_url}/accessibility-info to:
string:${portal_url}/accessibility-info
Changed url expression on action portal_actions/site_actions/contact
from: string: ${portal_url}/contact-info to:
string:${portal_url}/contact-info Changed url expression on action
portal_actions/site_actions/plone_setup from: string:
${portal_url}/plone_control_panel to:
string:${portal_url}/plone_control_panel
Changed condition on action portal_actions/object_buttons/cut from:
"python:portal.portal_membership.checkPermission("Delete objects",
object.aq_inner.getParentNode()) and
portal.portal_membership.checkPermission("Copy or Move", object) and
object is not portal and not (object.isDefaultPageInFolder() and
object.getParentNode() is portal)" to: "python:checkPermission("Delete
objects", object.aq_inner.getParentNode()) and checkPermission("Copy or
Move", object) and object is not portal and not
(object.isDefaultPageInFolder() and object.getParentNode() is portal)" 
Changed url expression on action portal_actions/object_buttons/cut from:
python:"%s/object_cut"%(object.isDefaultPageInFolder() and
object.getParentNode().absolute_url() or object_url) to:
string:${globals_view/getCurrentObjectUrl}/object_cut
Changed condition on action portal_actions/object_buttons/cut from:
"python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and checkPermission("Copy or Move",
object) and object is not portal and not (object.isDefaultPageInFolder()
and object.getParentNode() is portal)" to:
"python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and checkPermission("Copy or Move",
object) and not globals_view.isPortalOrPortalDefaultPage()" 
Changed condition on action portal_actions/object_buttons/cut from:
"python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and checkPermission("Copy or Move",
object) and not globals_view.isPortalOrPortalDefaultPage()" to:
"python:checkPermission("Delete objects",
globals_view.getParentObject()) and checkPermission("Copy or Move",
object) and not globals_view.isPortalOrPortalDefaultPage()" 
Changed condition on action portal_actions/object_buttons/copy from:
"python: portal.portal_membership.checkPermission("Copy or Move",
object) and object is not portal and not (object.isDefaultPageInFolder()
and object.getParentNode() is portal)" to:
"python:portal.portal_membership.checkPermission("Copy or Move", object)
and object is not portal and not (object.isDefaultPageInFolder() and
object.getParentNode() is portal)" 
Changed condition on action portal_actions/object_buttons/copy from:
"python:portal.portal_membership.checkPermission("Copy or Move", object)
and object is not portal and not (object.isDefaultPageInFolder() and
object.getParentNode() is portal)" to: "python:checkPermission("Copy or
Move", object) and object is not portal and not
(object.isDefaultPageInFolder() and object.getParentNode() is portal)" 
Changed url expression on action portal_actions/object_buttons/copy
from: python:"%s/object_copy"%(object.isDefaultPageInFolder() and
object.getParentNode().absolute_url() or object_url) to:
string:${globals_view/getCurrentObjectUrl}/object_copy
Changed condition on action portal_actions/object_buttons/copy from:
"python:checkPermission("Copy or Move", object) and object is not portal
and not (object.isDefaultPageInFolder() and object.getParentNode() is
portal)" to: "python:checkPermission("Copy or Move", object) and not
globals_view.isPortalOrPortalDefaultPage()" 
Changed url expression on action portal_actions/object_buttons/paste
from: python:"%s/object_paste"%((object.isDefaultPageInFolder() or not
object.is_folderish()) and object.getParentNode().absolute_url() or
object_url) to: string:${globals_view/getCurrentFolderUrl}/object_paste
Changed condition on action portal_actions/object_buttons/delete from:
"python:portal.portal_membership.checkPermission("Delete objects",
object.aq_inner.getParentNode()) and object is not portal and not
(object.isDefaultPageInFolder() and object.getParentNode() is portal)"
to: "python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and object is not portal and not
(object.isDefaultPageInFolder() and object.getParentNode() is portal)" 
Changed url expression on action portal_actions/object_buttons/delete
from: python:"%s/object_delete"%(object.isDefaultPageInFolder() and
object.getParentNode().absolute_url() or object_url) to:
string:${globals_view/getCurrentObjectUrl}/object_delete
Changed condition on action portal_actions/object_buttons/delete from:
"python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and object is not portal and not
(object.isDefaultPageInFolder() and object.getParentNode() is portal)"
to: "python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and not
globals_view.isPortalOrPortalDefaultPage()" 
Changed condition on action portal_actions/object_buttons/delete from:
"python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and not
globals_view.isPortalOrPortalDefaultPage()" to:
"python:checkPermission("Delete objects",
globals_view.getParentObject()) and not
globals_view.isPortalOrPortalDefaultPage()" 
Changed condition on action portal_actions/object_buttons/rename from:
"python:portal.portal_membership.checkPermission("Delete objects",
object.aq_inner.getParentNode()) and
portal.portal_membership.checkPermission("Copy or Move", object) and
portal.portal_membership.checkPermission("Add portal content", object)
and object is not portal and not (object.isDefaultPageInFolder() and
object.getParentNode() is portal)" to: "python:checkPermission("Delete
objects", object.aq_inner.getParentNode()) and checkPermission("Copy or
Move", object) and checkPermission("Add portal content", object) and
object is not portal and not (object.isDefaultPageInFolder() and
object.getParentNode() is portal)" 
Changed url expression on action portal_actions/object_buttons/rename
from: python:"%s/object_rename"%(object.isDefaultPageInFolder() and
object.getParentNode().absolute_url() or object_url) to:
string:${globals_view/getCurrentObjectUrl}/object_rename
Changed condition on action portal_actions/object_buttons/rename from:
"python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and checkPermission("Copy or Move",
object) and checkPermission("Add portal content", object) and object is
not portal and not (object.isDefaultPageInFolder() and
object.getParentNode() is portal)" to: "python:checkPermission("Delete
objects", object.aq_inner.getParentNode()) and checkPermission("Copy or
Move", object) and checkPermission("Add portal content", object) and not
globals_view.isPortalOrPortalDefaultPage()" 
Changed condition on action portal_actions/object_buttons/rename from:
"python:checkPermission("Delete objects",
object.aq_inner.getParentNode()) and checkPermission("Copy or Move",
object) and checkPermission("Add portal content", object) and not
globals_view.isPortalOrPortalDefaultPage()" to:
"python:checkPermission("Delete objects",
globals_view.getParentObject()) and checkPermission("Copy or Move",
object) and checkPermission("Add portal content", object) and not
globals_view.isPortalOrPortalDefaultPage()" 
Changed condition on action portal_actions/folder_buttons/change_state
from: "python:portal.portal_membership.checkPermission("Modify portal
content", object) or portal.portal_membership.checkPermission("Review
portal content", object)" to: "python:checkPermission("Modify portal
content", object) or checkPermission("Review portal content", object)" 
Changed condition on action portal_discussion/object/reply from:
"python: object is not None and
portal.portal_discussion.isDiscussionAllowedFor(object)" to:
"python:object is not None and
portal.portal_discussion.isDiscussionAllowedFor(object)" 
Changed condition on action portal_syndication/object/syndication from:
"python: folder is object and
portal.portal_syndication.isSiteSyndicationAllowed()" to: "python:folder
is object and portal.portal_syndication.isSiteSyndicationAllowed()" 
Fixed RTL.css expression to use the @@plone view Upgrade to: 2.5-beta2,
completed Attempting to upgrade from: 2.5-beta2 Upgrade to: 2.5-rc1,
completed Attempting to upgrade from: 2.5-rc1 Upgrade to: 2.5-rc2,
completed Attempting to upgrade from: 2.5-rc2 Upgrade to: 2.5-rc3,
completed Attempting to upgrade from: 2.5-rc3 Upgrade to: 2.5, completed
Attempting to upgrade from: 2.5 Added event-registration.js to
portal_javascipt Updated plone_lexicon pipeline. 
Modified existing object delete action
Upgrade to: 2.5.1-rc1, completed
Attempting to upgrade from: 2.5.1-rc1
Upgrade to: 2.5.1, completed
Attempting to upgrade from: 2.5.1
Changed credentials_cookie_path login_path property to 'require_login'. 
Upgrade to: 2.5.2-rc1, completed
Attempting to upgrade from: 2.5.2-rc1
Upgrade to: 2.5.2, completed
Attempting to upgrade from: 2.5.2
Added `text/x-web-markdown` and `text/x-web-textile`. 
Upgrade to: 2.5.3-rc1, completed
Attempting to upgrade from: 2.5.3-rc1
Upgrade to: 2.5.3-final, completed
Attempting to upgrade from: 2.5.3-final Set plone GS profile as default
Upgrade to: 2.5.4-final, completed Attempting to upgrade from:
2.5.4-final Upgrade to: 2.5.4-2, completed Attempting to upgrade from:
2.5.4-2 Upgrade to: 2.5.5, completed Attempting to upgrade from: 2.5.5
Migration completed at version 2.5.5 End of upgrade path, migration has
finished Your ZODB and Filesystem Plone instances are now up-to-date. 



More information about the Setup mailing list