Buildout для Plone 2.0.5
В 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