开发者

PicklingError while Installing add-on

I was given the task of upgrading a plone site from 3.1.7 to 4.0.3. I've successfully gotten the site upgraded, but now I'm trying to install collective.lineage and I get the following error:

Traceback (innermost last):

Module ZPublisher.Publish, line 135, in publish

Module Zope2.App.startup, line 291, in commit

Module transaction._manager, line 93, in commit

Module transaction._transaction, line 322, in commit

Module transaction._transaction, line 416, in _commitResources

Module ZODB.Connection, line 558, in commit

Module ZODB.Connection, line 606, in _commit

Module Z开发者_运维知识库ODB.Connection, line 640, in _store_objects

Module ZODB.serialize, line 422, in serialize

Module ZODB.serialize, line 431, in _dump

PicklingError: Can't pickle <class 'quills.app.portlets.quillslinks.IQuillsLinksPortlet'>: import of module quills.app.portlets.quillslinks failed

Quills was installed before the upgrade, but wasn't being utilized on the site so I uninstalled it while the site was still a 3.1.7 via the quickinstaller (I don't believe quills has an uninstall profile).

Additionally, this error doesn't effect all add-on's, i installed collective.redirect yesterday without incident.

Obviously Quills didn't uninstall cleanly, but honestly don't know where to start when fixing this.

Any help would be greatly appreciated.


It looks to me like Quills assigned some portlets somewhere that were not unassigned when Quills was removed.

The best solution would be to remove those portlets before removing Quills. Unfortunately, I'm not aware of a tool to get an overview of where portlets are assigned and identify at a glance where the offending portlet is so that you can remove it. Maybe someone else knows of such a tool?

You could try exporting the portlet configuration using the portal_setup tool; the resulting portlets.xml might include information on where this portlet or portlets are assigned.

Or instead of locating and removing the portlets, you could try registering a dummy replacement of the interface that's breaking (this should go in the initialization code of some product in your instance):

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

That last solution should be considered an ugly hack, though.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜