我的任务是将plone站点从3.1.7升级到4.0.3。我已经成功地升级了站点,但是现在我正在尝试安装collective.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
模块ZODB.Connection,第640行,_store_objects
模块ZODB.serialize,第422行,序列化
模块ZODB.serialize,第431行,_dump
PicklingError:无法对<class 'quills.app.portlets.quillslinks.IQuillsLinksPortlet'>进行腌制:模块quills.app.portlets.quillslinks导入失败
Quills是在升级之前安装的,但是没有在站点上使用,所以我在通过quickinstaller卸载站点时卸载它(我不认为quills有卸载配置文件)。
此外,此错误并不影响所有外接程序,我昨天安装了collective.redirect,没有发生事故.
显然,Quills并没有干净地卸载,但是老实说,当修复这个问题时,不知道从哪里开始。
任何帮助都将不胜感激。
发布于 2011-03-24 23:42:37
在我看来,Quills分配了一些在Quills被移除时没有分配的portlet。
最好的解决方案是在删除Quills之前删除这些portlets。不幸的是,我不知道有什么工具可以概述portlet的分配位置,并且一眼就可以识别出冒犯portlet的位置,这样您就可以删除它。也许其他人知道这样的工具?
您可以尝试使用portal_setup工具导出portlet配置;生成的portlets.xml可能包含有关此portlet或portlet分配位置的信息。
或者,您可以尝试注册正在中断的接口的虚拟替换(在实例中某些产品的初始化代码中),而不是定位和删除portlets:
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不过,最后一种解决方案应该被认为是一种丑陋的攻击。
https://stackoverflow.com/questions/5423239
复制相似问题