Сервер приложений Zope позволяет делать реплики базы данных и сохранять содержимое сайта в переносимом формате. При соблюдении ряда условий, такая реплика может быть в последствии импортирована в новый сервер. Благодаря этому возможна разработка сайтов "под заказ" на сервере исполнителя и передача готового сайта заказчику в виде реплик базы данных, внешних процедур и определений объектов. Данный документ описывает обычную процедуру восстановления реплик такого сайта и проблемы, которые могут при этом возникнуть.
Как правило, результаты работ передаваемые заказчику включают в себя следующие группы файлов, точные названия вы должны уточнить у поставщика:
Реплики базы ZODB3 содержащие сам сайт - обычно файлы с расширением *.zexp импортируемые в корень Zope;
Реплики базы ZODB3 содержащие определения Z-объектов - обычно файлы с расширением *.zexp импортируемые в папку /Control_Panel/Products;
Внешние процедуры - обычно файлы с расширением *.py размещаемые вы каталог Extensions экземпляра Zope;
Специализированные модули расширения Zope - архивы модулей расширения, идентичные описанным в InstallExtensionPackages.txt;
Реплики внешних баз данных - обычно используются реплики базы mysql;
Вспомогательные скрипты и утилиты серверной части - состав, формат и правила установки определяются производителем;
В последующих разделах будут подробно описаны процедуры установки этих файлов, рекомендуется выполнять их именно в этом порядке;
Поставщик должен предупредить вас, какие именно значения параметров подключения (хост, порт, логин, пароль и т.п.) используются vо стороны Zope, в противном случае, установка реплик, содержащих некоторые продукты (например, mysqlUserFolder) может оказаться невозможной. Подавляющее большинство баз данных не поддерживаются стандартной поставкой Zope (единственное исключение - ZGadFly, демонстрационная SQL-база). Поэтому, вы должны установить коннекторы к используемой вами базе данных. Для Zope 2.5.1 рекомендуемые коннекторы:
Пакеты ZMySQLDA-2.0.8, MySQL-python-0.9.2 : в варианте, поддерживаемом нами, отключено порождение исключений по невозможности отката транзакций, кроме того, пакет ZMySQLDA-2.0.8 был доработан для совместимости с MySQL-python-0.9.2 : обычный пакет работать правильно не будет;
Пакеты psycopg-1.0.12, psycopg-ZPsycopgDA-1.0.12 : пожалуйста, не используйте другие коннекторы, или по крайней мере не пишите нам о том, что они не работают : наш выбор - коннектор psycopg
Как правило, процесс установки таких модулей идентичен описанному в InstallExtensionPackages.txt и не вызывает проблем какого-либо рода, за исключением необходимости установить другие пакеты, на которые ссылаются данные.
Если не указано обратное, просто разместите внешние процедуры в каталоге
/var/lib/zope/<ИМЯ ЭКЗЕМПЛЯРА СЕРВЕРА>/Extensions
В первую очередь должны импортироваться реплики с определениями Z-объектов, следом за ними - реплики, содержащие сам сайт. Для выполнение импорта, все реплики нужно положить в каталог
/var/lib/zope/<ИМЯ ЭКЗЕМПЛЯРА СЕРВЕРА>/import
Определения Z-объектов импортируются в папку /Control_Panel/Products, для этого:
Введите url /Control_Panel/Products/manage;
Нажмите на кнопку import/export;
Внизу страницы найдите форму импорта;
В поле import file name введите имя файла реплики;
Выберите Take Owner Ship of imported objects;
Нажмите кнопку OK;
Если продукт импортирован удачно, папка продукта должна появиться на вкладке /Control_Panel/Products/manage_main;
Сами сайты, как правило, импортируются в корневую папку, для этого:
Введите url /manage;
Нажмите на кнопку import/export;
Внизу страницы найдите форму импорта;
В поле import file name введите имя файла реплики;
Нажмите кнопку OK;
Если сайт импортирован удачно, папка с ним должна появиться на вкладке /manage_main;
Если импортируемый сайт содержит SiteRoot, то, скорее всего вы должны изменить настройки прокси, чбы переадресовывать обращения к этому сайту. Если вы используете apache mod_proxy и наш конфигурационный файл apache, то конфигурационный файл должен быть включен в /etc/httpd/conf/httpd.conf директивой Include conf/zope_proxy.conf, а доступ к новому сайту прописывается в файле /etc/sysconfig/zope_hosts.cfg в следующем формате:
<ИМЯ ВИРТУАЛЬНОГО ХОСТА> <URL реального хоста>
, например:
zope.localdomain http://10.0.0.9:8080/Zope/Main
. Помните, единственный способ отредактировать SiteRoor - это стереть его, ухищрения типа SUPPRESS_SITEROOT=1 - лишь способ, облегчающий его стирание.
Если для доступа к импортируемому сайту использовался VirtualHostMonster, то строчки в файле /etc/sysconfig/zope_hosts.cfg будут немножко длиннее:
zope.localdomain http://localhost:8080/VirtualHostBase/http/zope.localdomain:80/Zope/Main/VirtualHostRoot
.
Как либо редактировать или стирать VirtualHostMonster не надо, просто убедитесь что в корневой папке Zope есть объект этого типа;
Если каким-либо методам назначены Proxy роли (т.е. проверка допусков при их обработке осуществляется так, как будто вызывавший их пользователь обладает такой ролью), то при выдаче прав будет выполняться проверка того, обладает ли этой ролью владелец этого метода. Если при импорте была изменена информация о владельцах таких методов, то обязательно проверьте, что бы новый владелец существовал и обладал требуемыми ролями.
Связанные с эти проблемы чаще всего проявляются в запрете выполнения на сайте анонимным пользователем таких операций как регистрация, отправка сообщений в форум, использования почтовых и других форм. Если проблем возникла - попробуйте исправить поля Proxy Roles и Ownership для метода, выполняющего запрещенную операцию.
Особый случай - mysqlUserFolder. Без подробных комментариев: выбирайте п. retain existing ownership information и создавайте учетную запись администратора, логин которой совпадает с логином разработчика создавшего объект mysqlUserFolder. Иначе это может не работать.
Сайт имеет SiteRoot и вписанное в него доменное имя нужно изменить. Рекомендуемые действия :
Перезапустите сервер с установленной переменной SUPPRESS_SITEROOT, например командой
SUPPRESS_SITEROOT=1 /etc/rc.d/init.d/zope restart <ИМЯ СЕРВЕРА>;
Сотрите существующий объект SITE_ROOT (не тратте время на его редактирование, не выйдет);
Создайте новый объект SITE_ROOT и при создании введите правильные данные;
Перезапустите сервер без переменной SUPPRESS_SITEROOT, например командой
/etc/rc.d/init.d/zope restart <ИМЯ СЕРВЕРА>;
Без подробных комментариев: редактирование объекта SITE_ROOT не работает. Всегда стирайте и создавайте заново;
Какой-либо используемый продукт не существует. Тогда при попытке входа на страницу управления экземпляром класса этого продукта вы увидите надпись "This object is broken, because ...", исправить можно только одним способом - установить недостающий продукт;
Логичный выход - настроить ее. К сожалению, это не всегда возможно : система авторизации может не поддерживаться в вашей среде, вам могут быть неизвестны пароли и тому подобные вещи. В тех случаях, когда есть или может быть получена XML-реплика, смелые парни, вроде меня, открывают ее VI и вычеркивают из ObjectManager ссылку на идентификатор acl_users. Те, для кого это пустой звук, могут попробовать сделать так :
sed -s "s/acl_users/acl_sonofbitch/g" <входная_реплика.xml >выходная_реплика.xml
После этого объекты acl_users перестанут быть таковыми, вы можете попробовать импортировать реплику обратно и стереть объекты acl_sonofbitch.
Еще раз - этот способ для смелых парней, которым нечего терять. Остальным лучше так не делать.