使用Python导出Zope文件夹
我们公司有两个Zope服务器,一个是正在使用的正式网站,另一个是开发网站。我正在写一个Python脚本,目的是把开发服务器上的所有内容转移到正式服务器上。目前这个过程需要在Zope管理界面里进行很多步骤。我想把这些步骤自动化,也就是说只需要运行一个脚本就能完成所有操作。其中有一项工作是需要从正式服务器上导出一个文件夹,这样在更新后我可以把它重新导入到正式网站上。我该如何通过Python脚本来实现这个操作呢?
我们使用的是Zope 2.8和Python 2.3.4
3 个回答
1
如果你真的想把所有东西都搬走,那你可以直接搬动 Data.fs 文件。不过如果不这样做,上面提到的导入/导出方法也是个不错的选择。
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))
如果我有足够的声望,我会把这个加到另一个答案里,但可惜我没有……如果有人想把它们合并在一起,请随意。
5
你可以试着使用位于文件 $ZOPE_HOME/lib/python/OFS/ObjectManager.py
中的两个函数 manage_exportObject
和 manage_importObject
。
假设我们安装了两个 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')