Buildout для Plone 2.0.5

Перевод статьи A buildout for Plone 2.0.5. Автор: David

В ONE/Northwest мы всегда ищем способы улучшить и упорядочить задачи нашего системного администрирования. В последнее время мы работаем по конвертации всех наших старых Zope копий в новые на основе buildout (чтобы было легче вновь создать условия для местного тестирования изменений или в случае, например, необходимости перейти на другой сервер). Вот некоторые советы, основанные на том, что мы узнали в процессе подготовки нашего buildout для Plone 2.0.5 …

Используйте правильный Python

Plone 2.0.5 основан на Zope 2.7, который требует Python 2.3, а не Python 2.4, который необходим для последних версий Zope. (Мы провели тесты, используя Python  2.4, и нам кажется он работает хорошо; однако версия Zope 2.7 RestrictedPython не проверялась в Python 2.4 и нет никакой гарантии, что пользователи с правами редактирования скриптов не смогут сделать какую-нибудь пакость).

Я установил Python 2.3, используя MacPorts, а затем сделал обязательные загрузки и запустил мой buildout, используя Python 2.3. Buildout первоначально ругался на отсутствие модуля "подпроцесса", но я смог обойти это, скопировав subprocess.py из моих библиотек Python 2.4 (/opt/local/lib/python2.4/subprocess.py в моем случае) в библиотеку Python 2.3.

"Готовка" некоторых продуктов

При классической установке  Zope, Вы сохраняете все ваши продукты в одном каталоге. В buildout они, как правило, распределены между несколькими каталогами. В случае с Zope 2.7, мы увидели проблему тогда, когда он нашел продукты, расположенные только в каталоге Продукта в корне buildout, несмотря на то, что мы внесли в список дополнительные каталоги. Чтобы обойти это, я использовал collective.recipe.omelette по символической ссылке на различные  buildout-произведенные каталоги в главный каталог Продукта, который находит Zope. Всегда приятно найти новое применение для инструмента, который создал для совершенно других задач!

Мы работаем на OS X, которая использует нечувствительную к регистру файловую систему, поэтому я начал использовать / svnproducts в качестве замены для /каталога расположения продуктов, который часто встречается в buildouts, поскольку в противном случае возникает конфликт с автоматически генерируемыми /Продуктами.

Ваша конфигурация здесь не подходит

К сожалению, zope.conf, который генерируется через рецепт plone.recipe.zope2instance, содержит пару разделов конфигурации (verbose-security и default-zpublisher-encoding), что является причиной неправильной работы Zope 2.7, поскольку  они были добавлены лишь в более поздние версии Zope. Чтобы это обойти, мы использовали sed (через рецепт plone.recipe.command) для удаления лишних разделов.

Buildout

Основываясь на выше изученном, я выдернул раздел конфигурации, характерный для нашей собственной системы и остановился на следующем:

[buildout]
parts =
    plone
    zope2
    productdistros
    omelette
    instance
    fixer

[plone]
recipe = plone.recipe.distros
urls = http://heanet.dl.sourceforge.net/sourceforge/plone/\
     Plone-2.0.5.tar.gz
nested-packages = Plone-2.0.5.tar.gz
version-suffix-packages = Plone-2.0.5.tar.gz

[zope2]
recipe = plone.recipe.zope2install
url = http://www.zope.org/Products/Zope/2.7.7/Zope-2.7.7-final.tgz
fake-zope-eggs = false

# Archetypes and kupu are not strictly required, but here's how
# to get them if you need them.
[productdistros]
recipe = plone.recipe.distros
urls =
    http://voxel.dl.sourceforge.net/sourceforge/archetypes/\
                              Archetypes-1.3.2-final-Bundle.tar.gz
    http://plone.org/products/kupu/releases/1.3.9/kupu.tgz
nested-packages =
    Archetypes-1.3.2-final-Bundle.tar.gz
version-suffix-packages =

[omelette]
recipe = collective.recipe.omelette
eggs =
packages =
    ${buildout:directory}/svnproducts .
    ${buildout:directory}/parts/productdistros .
    ${buildout:directory}/parts/plone .
location = ${buildout:directory}/Products

[instance]
recipe = plone.recipe.zope2instance
zope2-location = ${zope2:location}
user = admin:admin
http-address = 8080
debug-mode = on
verbose-security = on
products =
    ${buildout:directory}/Products

[fixer]
recipe = plone.recipe.command
command =
    sed -i '' 's/verbose-security/#verbose-security/' \
        ${buildout:directory}/parts/instance/etc/zope.conf
    sed -i '' 's/default-zpublisher-encoding/ \
        #default-zpublisher-encoding/' \
        ${buildout:directory}/parts/instance/etc/zope.conf
update-command = ${fixer:command}

Если я ничего не перепутал при сокращении, то это даже работает!

 

Большое спасибо моему коллеге Джону Болдивизо, который выполнил часть начальной работы над этим buildout.

 

Оригинал статьи на david.wglick.org

 Перевод ООО «Комтет» komtet.ru

Вам также может помочь