часть экземпляра не удаляется сборкой при переключении на 2 экземпляра Plone с использованием расширения раздела сборки

Мы переключаемся с одного на два экземпляра Zope для развертывания нашего продукта на Plone. У меня определена следующая структура сборки:

buildout.cfg

[buildout]
extends = app.cfg
... some environment specific stuff

app.cfg

[buildout]
extends = base.cfg

parts =
    zope2
    productdistros
    instance1
    instance2
    zopepy
    supervisor

[instance1]
<= instance
http-address = 18081

[instance2]
<= instance
http-address = 18082

base.cg

[buildout]
parts =
    zope2
    productdistros
    instance
    zopepy

... bulk of buildout configuration suitable for both server and development

Тестируя это, я ожидаю, что эта конфигурация сборки приведет к тому, что существующая часть экземпляра будет удалена и заменена экземплярами instance1 и instance2. Однако часть экземпляра не удаляется — ее все еще можно найти в каталоге bin и parts.

[zopetest@dev home]$ bin/buildout
Updating zope2.
Updating fake eggs
Updating productdistros.
Updating instance1.
Updating instance2.
Updating instance.
Updating zopepy.
Updating supervisor.

У меня есть очень похожая настройка на другом экземпляре zope, который был настроен таким образом с самого начала и не имеет части «экземпляр».

Мы запускаем zc.buildout 1.4.4 с Python 2.4.6, собирая Plone 3.3.6.

Я пробовал следующее без изменений: * обновление до buildout 1.5.2 * удаление назначения деталей из base.cfg


person scarba05    schedule 02.02.2012    source источник
comment
Я думаю, что это проблема сборки (ошибка?), потому что экземпляр определяется как зависимость. Попробуйте удалить все файлы с точками (.installed.cfg или что-то подобное) и посмотрите, поможет ли сборка забыть экземпляр.   -  person Mikko Ohtamaa    schedule 02.02.2012
comment
Не повезло. Я также попытался удалить каталоги bin и parts и запустить python bootstrap.py, но это тоже не сработало.   -  person scarba05    schedule 02.02.2012


Ответы (2)


Это «функция» plone.recipe.zope2instance. Традиционно рецепт избегал удаления экземпляров и сценариев, которые он создает для запуска plone (по какой-то причине: то ли плохой дизайн, то ли преднамеренное решение, я не уверен).

Что бы это ни стоило, начиная с версии 4.2.0 существует поддержка генерации не-plon-скриптов (аналогично zc.recipe.egg), и эти скрипты управляются должным образом. Видеть:

для всех кровавых подробностей. (Я считаю, что «особенность» заключается в том, что метод установки не возвращает кортеж, если вы не используете сценарии, и в этом случае возвращается кортеж, содержащий сценарии.)

person aclark    schedule 02.02.2012
comment
Спасибо, Алекс. Это имеет смысл, но есть ли способ удалить его вручную? - person scarba05; 03.02.2012
comment
Вы можете просто rm -rf parts/instance, IIUC, что вы просите. - person aclark; 03.02.2012
comment
Я уже пытался удалить каталоги bin и parts перед запуском python bootstrap.py, но это не сработало. - person scarba05; 06.02.2012

На самом деле это произошло из-за zc.buildout автоматический выбор детали функция

Когда на раздел с рецептом ссылаются либо посредством подстановки переменных, либо инициализирующим рецептом, этот раздел рассматривается как часть и добавляется в список частей перед частью, на которую ссылается

У меня был следующий раздел

[zopepy]
# For more information on this step and configuration options see:
# http://pypi.python.org/pypi/zc.recipe.egg
recipe = zc.recipe.egg
eggs = ${instance:eggs}

Поскольку он ссылался на раздел «экземпляр», «экземпляр» был включен в список частей.

Чтобы исправить, я изменил его, чтобы скопировать и вставить значение экземпляра яйца.

eggs =
    Plone
    ${buildout:eggs}

а затем запустил bin/buildout

person scarba05    schedule 17.04.2015