我的包引入了注册表项。站点管理员所做的更改不应在重新安装软件包时被覆盖。
很多方式去罗马。我选择了ftw.upgrade。我喜欢升级步骤语法的声明方式。可以将升级目录用于通用设置 xml 文件,如 propertiestool.xml。无需定义处理程序 python 代码。升级效果很好。管理员可以从控制面板升级,在我的情况下,添加了新属性。Insomma:对于新属性,只需添加以下内容:源和目标版本的升级步骤声明以及找到 properties.xml 的目录。竖起大拇指!–
我的包引入了注册表项。站点管理员所做的更改不应在重新安装软件包时被覆盖。
很多方式去罗马。我选择了ftw.upgrade。我喜欢升级步骤语法的声明方式。可以将升级目录用于通用设置 xml 文件,如 propertiestool.xml。无需定义处理程序 python 代码。升级效果很好。管理员可以从控制面板升级,在我的情况下,添加了新属性。Insomma:对于新属性,只需添加以下内容:源和目标版本的升级步骤声明以及找到 properties.xml 的目录。竖起大拇指!–
Extension/install.py您可以通过提供包含方法的文件来在安装 Plone 附加组件时进行试验install:
def install(portal, reinstall=False):
if not reinstall:
setup_tool = portal.portal_setup
setup_tool.runAllImportStepsFromProfile('profile-your.pfile:default')
这样你就可以驱动安装时 Plone 应该做的事情。
如果您需要它:卸载时相同:
def uninstall(portal, reinstall=False):
if not reinstall:
setup_tool = portal.portal_setup
setup_tool.runAllImportStepsFromProfile('profile-example.gs:uninstall')
这样,您可以防止在重新安装时运行卸载步骤。
警告:正如 Mathias 建议的那样,使用 quickinstaller -> reinstall 功能不好。
警告:这可能不再适用于 Plone 5(对此有公开讨论)。
我认为您所描述的是随着 Plone 堆栈复杂性的增加即将出现的问题之一,以及为什么不建议再执行重新安装而是为每个版本的 Add-提供配置文件的原因之一-开启,通过升级步骤(如 Mathias 所述)。根据我的经验,这会显着增加开发时间并导致更多冲突。以下是参考文档: http ://docs.plone.org/develop/addons/components/genericsetup.html#add-upgrade-step
Elizabeth Leddy 曾经写过一个插件来缓解这种痛苦,我可以确认它确实如此: https ://github.com/ampsport/amp.ezupgrade
还有来自 FTW 的好人,我也从未使用过它,但看起来很有希望: https ://pypi.python.org/pypi/ftw.upgrade
都没有使用这个,甚至声称有一些额外的好东西,比如清理损坏的 OFS 对象和 R. Patterson 的: https ://github.com/collective/collective.upgrade
当我们在这里时,我能找到的第一个关于它的好文档 ~ 1.5 年前,当然来自 Uwosh: http ://www.uwosh.edu/ploneprojects/docs/how-tos/how-to-use -通用设置升级步骤
另一种解决方案可以是检查它是初始安装还是重新安装,并通过 Python 脚本以编程方式设置属性,方便地称为“setuphandlers.py”,如此答案中所述: 如何检查,如果我的产品已经安装了,什么时候安装呢? 这样一来,人们仍然可以触发重新安装而不会将其全部炸毁。
最后,很多 GS-xml 文件都理解purge-property,将其设置为False,不会覆盖整个文件,只会覆盖您给定的道具。这可能适用于您的案例,也可能不适用于您的案例,您可以在上面引用的官方文档中找到示例。