我该如何解决:成员CMFPlone产品中的此对象已损坏!?

问题描述

| 我有一个Plone 2.5站点,该站点升级到Plone 4.1rc3(或4.0.x)时似乎具有损坏的Member dir(即使我先升级到3.3.x)。 在升级过程中,我得到以下信息:
2011-06-23 13:44:39 ERROR plone.app.upgrade Upgrade aborted. Error:
Traceback (most recent call last):
  File \"/Users/aclark/Downloads/eggs-directory/Products.Cmfplone-4.1rc3-py2.6.egg/Products/Cmfplone/MigrationTool.py\",line 175,in upgrade
    step[\'step\'].doStep(setup)
  File \"/Users/aclark/Downloads/eggs-directory/Products.GenericSetup-1.6.3-py2.6.egg/Products/GenericSetup/upgrade.py\",line 142,in doStep
    self.handler(tool)
  File \"/Users/aclark/Downloads/eggs-directory/plone.app.upgrade-1.1rc3-py2.6.egg/plone/app/upgrade/v40/alphas.py\",line 478,in updateLargeFolderType
    update(brain)
  File \"/Users/aclark/Downloads/eggs-directory/plone.app.upgrade-1.1rc3-py2.6.egg/plone/app/upgrade/v40/alphas.py\",line 472,in update
    obj._setPortalTypeName(\'Folder\')
AttributeError: _setPortalTypeName
> /Users/aclark/Downloads/eggs-directory/plone.app.upgrade-1.1rc3-py2.6.egg/plone/app/upgrade/v40/alphas.py(472)update()
    471         obj = brain.getobject()
--> 472         obj._setPortalTypeName(\'Folder\')
    473         reindex(obj,idxs=[\'portal_type\',\'Type\',\'object_provides\'])

ipdb> obj
<persistent broken Products.Cmfplone.LargePloneFolder.LargePloneFolder instance \'\\x00\\x00\\x00\\x00\\x00\\x00\\x07W\'>
为什么会这样呢?是否应该已经由LargePloneFolder弃用代码处理过?我以前从未见过。我知道在某些时候,已经对Products.CMPlone和Plone包进行了代码重组(这样,现在一个或另一个成为了填充程序),我想知道这是否可能引起问题。 在ZMI中,members文件夹如下所示: 我该怎么做才能尝试调查/解决此问题?     

解决方法

        您的成员文件夹来自原型之前的日子。如果我没有记错的话,早期Plone 2.1.x发行版中的ATContentTypes迁移确实会错过大型文件夹。 在Plone 2.5中,创建一个新的\“ Large Plone Folder \”,确保其类型正确(Products.ATContentTypes.content.folder.ATBTreeFolder),将Members文件夹的内容移到其中,删除旧的Members文件夹并重命名给会员的新大文件夹。 也许ATContentTypes迁移代码仍然存在,但是我完全不记得如何调用它了。您还可以基于Products.contentmigration编写自己的迁移代码,然后在Plone 3.x站点中运行该代码。