Очистка POSKeyError: «Нет файла blob» с сайта Plone - PullRequest
2 голосов
/ 28 декабря 2011

У нас есть старый сайт Plone с Data.fs и blobstorage, который, возможно, был неправильно скопирован в некоторый момент в прошлом.Перестроение portal_catalog не запускается из-за POSKeyErrors

    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 ]

2 голосов
/ 05 января 2012
2 голосов
/ 10 января 2012

Попробуйте также это экспериментальный. Gracefulblobmissing

1 голос
/ 28 декабря 2011

Когда я столкнулся с этим, я (локально) пропатчил 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, путь в хранилище блобов типа bushy соответствует первым байтам oid, и в моем случае я объединял два хранилища блобов, так что этого было достаточно, чтобы найти его.)

...