【问题标题】:PicklingError while Installing add-on安装附加组件时出现 PicklingError
【发布时间】:2011-03-24 17:40:42
【问题描述】:

我的任务是将一个克隆站点从 3.1.7 升级到 4.0.3。我已成功升级站点,但现在我正在尝试安装collective.lineage,但出现以下错误:

Traceback(最里面最后):
模块 ZPublisher.Publish,第 135 行,在发布
模块 Zope2.App.startup,第 291 行,在提交中
提交中的模块 transaction._manager,第 93 行
提交中的模块 transaction._transaction,第 322 行
_commitResources
中的模块 transaction._transaction,第 416 行 模块 ZODB.Connection,第 558 行,提交中
模块 ZODB.Connection,第 606 行,在 _commit
_store_objects
中的模块 ZODB.Connection,第 640 行 模块 ZODB.serialize,第 422 行,在序列化
_dump
中的模块 ZODB.serialize,第 431 行 PicklingError: Can't pickle <class 'quills.app.portlets.quillslinks.IQuillsLinksPortlet'>: 导入模块 quills.app.portlets.quillslinks 失败

Quills 是在升级之前安装的,但没有在网站上使用,所以我在网站仍然是 3.1.7 时通过 quickinstaller 卸载了它(我不相信 quills 有卸载配置文件)。

此外,此错误不会影响所有插件,我昨天安装了collective.redirect 没有发生任何事件。

显然,Quills 没有完全卸载,但老实说,修复此问题时不知道从哪里开始。

任何帮助将不胜感激。

【问题讨论】:

    标签: portlet uninstallation plone


    【解决方案1】:

    在我看来,Quills 将一些 portlet 分配到了某个地方,而当 Quills 被移除时,这些 portlet 并没有取消分配。

    最好的解决方案是在删除 Quills 之前删除这些 portlet。不幸的是,我不知道有一种工具可以概览分配 portlet 的位置,并一眼就能识别出有问题的 portlet 的位置,以便您可以将其删除。也许其他人知道这样的工具?

    您可以尝试使用portal_setup 工具导出portlet 配置;生成的 portlets.xml 可能包含有关分配此 portlet 的位置的信息。

    或者,您可以尝试注册一个虚拟替换正在破坏的接口(这应该在您的实例中某些产品的初始化代码中),而不是定位和删除 portlet:

    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
    

    不过,最后一个解决方案应该被视为丑陋的 hack。

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多