清理POSKeyError:来自Plone站点的'无blob文件'内容

时间:2011-12-28 12:03:12

标签: blob plone zope

我们有一个旧的Plone站点,其中包含Data.fs和blobstorage,它可能在过去的某些时候被错误地复制过了。由于POSKeyErrors

,portal_catalog重建无法运行
    Module plone.indexer.wrapper, line 59, in __getattr__
    Module plone.indexer.delegate, line 16, in __call__
    Module Products.CMFPlone.CatalogTool, line 221, in getObjSize
    Module Products.ATContentTypes.content.base, line 198, in get_size
    Module plone.app.blob.field, line 273, in get_size
    Module plone.app.blob.field, line 85, in get_size
    Module plone.app.blob.utils, line 52, in openBlob
    Module ZODB.Connection, line 860, in setstate
    Module ZODB.Connection, line 922, in _setstate
    Module ZODB.blob, line 644, in loadBlob
  POSKeyError: 'No blob file'

网站本身运作良好。 Blob可能用于文件下载和图像中某些不经常访问的内容,这无关紧要。

如何跟踪出现blob错误的内容,打印出来并将其删除?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

当我遇到这个时,我(本地)修补了blob.py来阅读

def loadBlob(self, oid, serial):
    """Return the filename where the blob file can be found.
    """
    filename = self.fshelper.getBlobFilename(oid, serial)
    if not os.path.exists(filename):
        raise POSKeyError("No blob file oid=%s, serial=%s" % (oid, serial,) , oid, serial)
    return filename

(oid = ...是加法)并进一步手动跟踪。 (IIRC,类型浓密的blobstorage中的路径对应于oid的第一个字节,在我的情况下,我正在合并两个blobstorage,所以这足以找到它。)

答案 2 :(得分:1)