我正在尝试从应该是相同的Plone版本和插件包的zexp导入网站。但是,当我这样做时,我得到
Module ZPublisher.Publish, line 60, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 46, in call_object
Module OFS.ObjectManager, line 620, in manage_importObject
Module OFS.ObjectManager, line 638, in _importObjectFromFile
Module ZODB.ExportImport, line 92, in importFile
Module transaction._transaction, line 260, in savepoint
Module transaction._transaction, line 257, in savepoint
Module transaction._transaction, line 690, in __init__
Module ZODB.Connection, line 1123, in savepoint
Module ZODB.Connection, line 587, in _commit
Module ZODB.ExportImport, line 176, in _importDuringCommit
ImportError: No module named MyOldPackage.Content
这是一个古老的Archetypes类,此后已被迁移到Dexterity中的替换。我以为我删除了所有引用,但显然有些东西被遗漏了。我知道我必须删除所有使用这个类的对象,但是有什么问题 - 如何找到哪些对象使用它们?
我以为我在CMFEditions工具中找到了一些东西,但这可能是一个红色的鲱鱼。试图导出portal_historiesstorage产生相同的错误,所以我想也许过去内容的一些旧版本卡在那里。删除了影子存储并重建了它,所以它现在是空白的(ZMI页面确认了这一点)。但是在尝试导入这个工具时我仍然遇到错误 - 它是如何继续尝试引用这个类的?这就是为什么我认为它可能是一个红色的鲱鱼并且它从门户网站对象继承了一些东西,但我正在努力寻找这个类的引用位置。
编辑: 看起来我在zvc_repo中有一些不好的东西 - 我不确定影子存储和这应该做什么的区别。这是一个提议的脚本。有没有更好的CMFEditions或ZopeVersionControl的人可以评论这听起来如何吗?
tool = portal.portal_historiesstorage
from ZODB.broken import PersistentBroken
bad_repo_ids = set()
for sequence in tool.zvc_repo._histories:
for version in tool.zvc_repo[sequence]._versions:
obj = tool.zvc_repo[sequence].getVersionById(version)._data._object.object
if isinstance(obj, PersistentBroken):
bad_repo_ids.add(sequence)
for bid in bad_repo_ids:
del tool.zvc_repo._histories[bid]