PicklingError при установке дополнения

Мне дали задание обновить сайт plone с 3.1.7 до 4.0.3. Я успешно обновил сайт, но теперь пытаюсь установить коллектив. Lineage и получаю следующую ошибку:

Обратная трассировка (самая последняя):
Модуль ZPublisher.Publish, строка 135, в публикации
Модуль Zope2.App.startup, строка 291, в фиксации
Модуль transaction._manager, строка 93, в фиксации
Модуль transaction._transaction, строка 322, в коммите
Модуль transaction._transaction, строка 416, в _commitResources
Модуль ZODB.Connection, строка 558, в коммите
Модуль ZODB.Connection, строка 606, в _commit< br> Модуль ZODB.Connection, строка 640, в _store_objects
Модуль ZODB.serialize, строка 422, в serialize
Модуль ZODB.serialize, строка 431, в _dump
PicklingError: Can't pickle <class 'quills.app.portlets.quillslinks.IQuillsLinksPortlet'>: import модуля quills.app.portlets.quillslinks не удалось

Quills был установлен до обновления, но не использовался на сайте, поэтому я удалил его, когда сайт был еще версии 3.1.7, с помощью программы быстрой установки (я не верю, что у quills есть профиль удаления).

Кроме того, эта ошибка не влияет на все надстройки, вчера я установил коллективный.редирект без происшествий.

Очевидно, что Quills не удалили полностью, но, честно говоря, не знаю, с чего начать, чтобы исправить это.

Любая помощь будет принята с благодарностью.


person keiththomps    schedule 24.03.2011    source источник


Ответы (1)


Мне кажется, что Quills назначил куда-то некоторые портлеты, которые не были отменены, когда Quills был удален.

Лучшим решением было бы удалить эти портлеты перед удалением Quills. К сожалению, я не знаю инструмента, позволяющего получить обзор того, где назначены портлеты, и сразу определить, где находится вызывающий нарушение портлет, чтобы его можно было удалить. Может быть, кто-то еще знает о таком инструменте?

Вы можете попробовать экспортировать конфигурацию портлета с помощью инструмента portal_setup; результирующий файл portlets.xml может содержать информацию о назначении этого портлета или портлетов.

Или вместо того, чтобы находить и удалять портлеты, вы можете попробовать зарегистрировать фиктивную замену интерфейса, который ломается (это должно быть в коде инициализации какого-либо продукта в вашем экземпляре):

import imp, sys
from zope.interface import Interface
m = imp.new_module('quills.app.portlets.quillslinks')
sys.modules['quills.app.portlets.quillslinks'] = m
m.IQuillsLinksPortlet = Interface

Однако это последнее решение следует считать уродливым взломом.

person David Glick    schedule 24.03.2011