Вопрос

У нас есть два сервера zope, на которых работает внутренний сайт нашей компании.Один из них - это живой сайт, а другой - сайт разработчика.Я работаю над написанием скрипта на Python, который перемещает все с сервера разработки на живой сервер.Прямо сейчас процесс включает в себя множество шагов, которые выполняются в интерфейсе управления zope.Мне нужно сделать все это автоматическим, чтобы запуск одного скрипта обрабатывал все это.Одна вещь, которую мне нужно сделать, это экспортировать одну папку с текущего сервера, чтобы я мог повторно импортировать ее обратно на текущий сайт после обновления.Как я могу сделать это из скрипта Python?

Мы используем Zope 2.8 и python 2.3.4

Это было полезно?

Решение

Вы можете попробовать использовать следующие функции manage_exportObject и manage_importObject находится в файле $ZOPE_HOME/lib/python/OFS/ObjectManager.py

Допустим, мы устанавливаем два экземпляра Zope 2.8, расположенных по адресу:

  • /tmp/instance/dev для сервера разработки (порт 8080)
  • /tmp/instance/prod для рабочего сервера (порт 9090)

В ZMI сервера разработки я создал две папки /MyFolder1 и /MyFolder2 содержит несколько шаблонов страниц.Следующий скрипт Python экспортирует каждую папку в файлах .zexp и импортирует их в ZMI производственного экземпляра:

#!/usr/bin/python
import urllib
import shutil

ids_to_transfer = ['MyFolder1', 'MyFolder2']

for id in ids_to_transfer:
    urllib.urlopen('http://admin:password_dev@localhost:8080/manage_exportObject?id=' + id)

    shutil.move('/tmp/instance/dev/var/' + id + '.zexp', '/tmp/instance/prod/import/' + id + '.zexp')

    urllib.urlopen('http://admin:password_prod@localhost:9090/manage_delObjects?ids=' + id)
    urllib.urlopen('http://admin:password_prod@localhost:9090/manage_importObject?file=' + id + '.zexp')

Другие советы

Чтобы сделать это более общим и разрешить копирование папок, не находящихся в корневом каталоге, я бы сделал что-то вроде этого:

#!/usr/bin/python
import urllib
import shutil

username_dev = 'admin'
username_prod = 'admin'
password_dev = 'password_dev'
password_prod = 'password_prod'
url_dev = 'localhost:8080'
url_prod = 'localhost:9090'

paths_and_ids_to_transfer = [('level1/level2/','MyFolder1'), ('level1/','MyFolder2')]

for path, id in ids_to_transfer:
    urllib.urlopen('http://%s:%s@%s/%smanage_exportObject?id=%s' % (username_dev, password_dev, url_dev, path, id))

    shutil.move('/tmp/instance/dev/var/' + id + '.zexp', '/tmp/instance/prod/import/' + id + '.zexp')

    urllib.urlopen('http://%s:%s@%s/%smanage_delObjects?ids=%s' % (username_prod, password_prod, url_prod, path, id))
    urllib.urlopen('http://%s:%s@%s/%smanage_importObject?file=%s.zexp' % (username_prod, password_prod, url_prod, path, id))

Если бы у меня был представитель, я бы добавил это к другому ответу, но, увы...Если кто-то хочет объединить их, пожалуйста, продолжайте.

Если ты действительно переедешь все вероятно, вы могли бы просто переместить Data.fs вместо этого.Но в остальном описанный выше импорт / экспорт - хороший способ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top