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

我们使用 Zope 2.8 和 python 2.3.4

有帮助吗?

解决方案

您可以尝试使用这些功能 manage_exportObjectmanage_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