Как предотвратить перезапись значений пользовательских записей реестра при переустановке моего пакета?
Мой пакет вводит записи реестра. Изменения администратором сайта не должны перезаписываться при переустановке пакета.
Много способов добраться до Рима. Я выбрал ftw.upgrade. Мне нравится декларативный способ синтаксиса шага обновления. Можно использовать каталог обновления для общих настроек xml-файлов, таких как propertiestool.xml. Нет необходимости определять обработчик кода Python. Обновление работает хорошо. Администратор может обновить с панели управления, и в моем случае новое свойство добавляется. Insomma: Для нового свойства нужно добавить только это: объявление шага обновления для исходной и целевой версии и каталог, где найти файл properties.xml. Палец вверх! -
2 ответа
Вы можете попробовать, что делать при установке дополнения Plone, предоставив Extension/install.py
файл с 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')
Таким образом, вы можете предотвратить запуск шага удаления при переустановке.
Предупреждение: как Матиас предложил использовать quickinstaller -> функция переустановки плохая.
Предупреждение: это, вероятно, больше не будет работать на Plone 5 (об этом есть открытая дискуссия).
Я думаю, что вы описываете, является одной из проблем, возникающих в связи с возрастающей сложностью стека Plone, и одной из причин, почему не рекомендуется выполнять переустановку больше, а предоставлять профиль для каждой версии Add- Вкл, через шаги апгрейда (как упоминал Матиас). Это значительно увеличивает время разработки и приводит к еще большему количеству конфликтов моего опыта. Вот справочные документы: http://docs.plone.org/develop/addons/components/genericsetup.html
Элизабет Ледди однажды написала дополнение, чтобы облегчить эту боль, и я могу подтвердить, что это так: https://github.com/ampsport/amp.ezupgrade
И отличные ребята из FTW тоже, я никогда не использовал его, но выглядит многообещающе: https://pypi.python.org/pypi/ftw.upgrade
Ни один из них не использовал его, даже утверждает, что у него есть некоторые дополнительные полезности, такие как очистка сломанных объектов OFS и объектов Р. Паттерсона: https://github.com/collective/collective.upgrade
Поскольку мы здесь, первый хороший документ, который я смог найти об этом ~ 1,5 года назад, прибывает из Uwosh, конечно: http://www.uwosh.edu/ploneprojects/docs/how-tos/how-to-use-generic-setup-upgrade-steps
Другое решение может состоять в том, чтобы проверить, является ли это первоначальной или переустановкой, и установить свойства программно с помощью Python-скрипта, обычно называемого "setuphandlers.py", как описано в этом ответе: Как проверить, если мой продукт уже установлен, при установке? Таким образом, можно по-прежнему запускать переустановки, не взрывая их.
Наконец, многие из GS-xml-файлов понимают purge
-свойство, установив его False
, не будет перезаписывать весь файл, только ваши данные реквизиты. Это может или не может применяться к вашему делу, вы можете найти образцы в приведенном выше официальном документе.