5

我们有两台 zope 服务器运行我们公司的内部站点。一个是现场站点,一个是开发站点。我正在编写一个 python 脚本,将所有内容从开发服务器移动到实时服务器。现在,该过程涉及在 zope 管理界面中完成的一系列步骤。我需要使所有这些自动化,以便运行一个脚本来处理这一切。我需要做的一件事是从实时服务器导出一个文件夹,以便在更新后将其重新导入实时站点。如何从 python 脚本执行此操作?

我们使用的是 Zope 2.8 和 python 2.3.4

4

3 回答 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')
于 2009-06-06T16:03:14.710 回答
3

为了使其更通用并允许复制不在根目录中的文件夹,我将执行以下操作:

#!/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))

如果我有代表,我会将其添加到另一个答案中,但是唉……如果有人想合并它们,请继续。

于 2009-06-15T17:17:57.570 回答
0

如果你真的移动所有东西,你可能只是移动 Data.fs 。但除此之外,上面的导入/导出是一个好方法。

于 2009-06-20T17:21:05.353 回答