gpt4 book ai didi

plone - 如何在 Plone 站点外触发 portal_quickinstaller.reinstallProducts 表单?

转载 作者:行者123 更新时间:2023-12-04 22:24:41 24 4
gpt4 key购买 nike

我们正在运行一个 Zope 服务器,最终有大量的 Plone (4) 站点。时不时会出现扩展产品更新,需要重新安装才能获取配置文件设置中的更改,例如新的内容类型。

手动,这意味着点击每个 Plone 站点的 portal_quickinstaller ,勾选产品,按更新。如果我们谈论的是数十个站点,这不是很可行,所以我正在尝试将其自动化。基本上到目前为止,我在 Zope 根目录中有以下内容作为脚本(Python):

a = context.restrictedTraverse('/')

p = a['Plone']
print p.getSiteManager()
qi = p.restrictedTraverse('portal_quickinstaller')
print qi
qi.reinstallProducts('LinguaPlone')

(简化;实际上我有一个更长的列表而不是单个 Plone 实例,我可能想重新安装更长的产品列表。)
这失败了:
  Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 613, in uninstallProducts
Module Products.CMFQuickInstallerTool.InstalledProduct, line 272, in uninstall
Module Products.CMFQuickInstallerTool.InstalledProduct, line 351, in _cascadeRemove
AttributeError: 'BaseGlobalComponents' object has no attribute 'objectItems'

从我到目前为止的调试尝试来看, BaseGlobalComponentszope.component.getSiteManager 返回的 Zope SiteManager。我如何说服快速安装程序选择正确的安装程序,即它所在的 Plone 站点上的安装程序?

或者,我将如何以一种对大型安装仍然模糊可行的方式自动重新安装产品? ( ETA :我知道这不是您使用 cronjob 自动执行的那种事情,但恐怕无法避免内部开发产品的更新。)

最佳答案

以下是更改事件本地站点管理器的方法。您将无法在受限 Python 中执行此操作,因此您需要将 Python 脚本转换为外部方法或浏览器 View 。

from zope.app.component.hooks import setHooks, setSite
setHooks()
setSite(site)

setHooks 调用只需执行一次。在 Zope 2.12 中,这些调用应该从 zope.site.hooks 导入,在 Zope 2.13 中从 zope.component.hooks 导入。

请记住,调用reinstallProducts 不适用于所有附加产品,除非您仔细检查了重新安装的作用并确定它不会导致问题,否则不建议使用。某些产品提供升级步骤,可以更有选择性地运行操作。

关于plone - 如何在 Plone 站点外触发 portal_quickinstaller.reinstallProducts 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com