产品依赖性:触发重新安装

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.)

ggo*_*zad 5

解决问题的方法比你建议的容易得多:

我们不会像过去那样在产品更新时重新安装产品.重新安装产品将导致重新应用通用设置配置文件,这就是您覆盖设置的原因.

相反,您现在提供升级步骤.例如,如果您将配置文件版本从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中增加版本.在这种情况下,您显然也不需要升级步骤.