如何修复:成员(来自CMFPlone产品的此对象已损坏!)?

如何修复:成员(来自CMFPlone产品的此对象已损坏!)?,plone,Plone,我有一个Plone 2.5站点,当升级到Plone 4.1rc3(或4.0.x)时,它似乎有一个断开的成员目录(即使我先升级到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.CMFPl

我有一个Plone 2.5站点,当升级到Plone 4.1rc3(或4.0.x)时,它似乎有一个断开的成员目录(即使我先升级到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'>
2011-06-23 13:44:39错误plone.app.upgrade中止。错误:
回溯(最近一次呼叫最后一次):
文件“/Users/aclark/Downloads/eggs目录/Products.CMFPlone-4.1rc3-py2.6.egg/Products/CMFPlone/MigrationTool.py”,第175行,在升级中
步骤['step'].doStep(设置)
文件“/Users/aclark/Downloads/eggs目录/Products.GenericSetup-1.6.3-py2.6.egg/Products/GenericSetup/upgrade.py”,第142行,在doStep中
self.handler(工具)
文件“/Users/aclark/Downloads/egs directory/plone.app.upgrade-1.1rc3-py2.6.egg/plone/app/upgrade/v40/alphas.py”,第478行,在updateLargeFolderType中
更新(大脑)
文件“/Users/aclark/Downloads/egs目录/plone.app.upgrade-1.1rc3-py2.6.egg/plone/app/upgrade/v40/alphas.py”,第472行,更新中
对象。\u setPortalTypeName('文件夹')
AttributeError:\u setPortalTypeName
>/Users/aclark/Downloads/eggs目录/plone.app.upgrade-1.1rc3-py2.6.egg/plone/app/upgrade/v40/alphas.py(472)update()
471 obj=brain.getObject()
-->472对象\u setPortalTypeName('文件夹')
473重新索引(obj,idxs=['portal\u type','type','object\u provides']))
ipdb>obj
为什么会这样?这不应该已经由LargePloneFolder弃用代码处理了吗?我以前从未见过这种情况。我知道,在某个时候,Products.CMPlone和Plone包发生了代码重组(其中一个现在是垫片),我想知道这是否会导致问题

在ZMI中,members文件夹如下所示:


我可以做些什么来尝试调查/解决这个问题?

您的“成员”文件夹来自原型之前的日子。如果我没记错的话,早期Plone 2.1.x版本中的ATContentTypes迁移确实在某些时候丢失了大型文件夹

在Plone 2.5中创建一个新的“大型Plone文件夹”,确保其类型正确(Products.ATContentTypes.content.Folder.ATBTreeFolder),将成员文件夹的内容移动到其中,删除旧的成员文件夹,并将新的大型文件夹重命名为成员

也许ATContentTypes迁移代码仍然存在,但我已经记不起如何调用它了。您还可以基于Products.contentmigration编写自己的迁移代码,并在Plone 3.x站点上运行