Mar*_*ent 4 plone dependency-management
我正在为Plone开发一种产品foo.core
.除了核心产品外,还有几个相关产品.喜欢foo.optional
.这些相关产品可能在实例中可用,如果它们可用,则可以安装(换句话说:我不能假设代码可用,或者如果是,则应该使用).
这些相关产品可能会覆盖由foo.core
(例如在属性表中)进行的设置.这工作正常,但如果我重新安装foo.core
,默认设置又回来了.我想要的是以某种方式在QuickInstaller中重新安装foo.optional
时自动重新foo.core
安装.
我能提出的解决方案是:
foo.optional
安装时,它本身注册foo.core
.后者foo.core
将在重新安装核心软件包时处理所有已注册产品的重新安装.foo.core
包触发了一个事件,其他包foo.optional
可以监听.然后,事件处理程序将触发重新安装
foo.optional
.foo.core
不会覆盖其他产品可能稍后自定义的任何设置.也许还有更多选择?什么是"Plonish"方法?
编辑:我知道使用升级步骤可能比重新安装产品更好.但是,恕我直言,问题仍然存在:用于升级步骤的通用设置配置文件可能具有在foo.optional
包的通用设置配置文件中修改的设置.
因此,使用升级步骤会使我的问题变得更加困难:我应该如何确定是否应该重新安装/升级foo.core
平均值的升级步骤foo.optional
?(foo.core
原则上仍然不知道这个假设foo.optional
.)
解决问题的方法比你建议的容易得多:
我们不会像过去那样在产品更新时重新安装产品.重新安装产品将导致重新应用通用设置配置文件,这就是您覆盖设置的原因.
相反,您现在提供升级步骤.例如,如果您将配置文件版本从2更改为3,那么您将拥有:
<genericsetup:upgradeStep
title="Upgrade foo.core from revision 2 to 3"
description="Adds stuff"
source="2"
destination="3"
handler="foo.core.upgrades.two_to_three.addStuff"
sortkey="1"
profile="foo.core:default"
/>
Run Code Online (Sandbox Code Playgroud)
在升级步骤中,您可以执行您喜欢的操作,甚至可以重新运行单个导入步骤.
如果您的产品升级不涉及更改GS配置文件,请不要在metadata.xml中增加版本.在这种情况下,您显然也不需要升级步骤.
归档时间: |
|
查看次数: |
137 次 |
最近记录: |