5

当社の内部サイトを実行する 2 つの Zope サーバーがあります。1 つはライブ サイトで、もう 1 つは開発サイトです。私は開発サーバーからライブ サーバーにすべてを移動する python スクリプトの作成に取り組んでいます。現在、このプロセスには、zope 管理インターフェースで実行される一連のステップが含まれています。1 つのスクリプトを実行してすべてを処理できるように、すべてを自動化する必要があります。私がしなければならないことの 1 つは、更新後にライブ サイトに再インポートできるように、ライブ サーバーから 1 つのフォルダーをエクスポートすることです。Pythonスクリプトからこれを行うにはどうすればよいですか?

Zope 2.8 と python 2.3.4 を使用しています。

4

3 に答える 3

4

ファイルにある関数を使用してみることができmanage_exportObjectますmanage_importObject$ZOPE_HOME/lib/python/OFS/ObjectManager.py

次の場所に 2 つの Zope 2.8 インスタンスをインストールするとします。

  • /tmp/instance/dev開発サーバー用 (ポート 8080)
  • /tmp/instance/prod本番サーバー用 (ポート 9090)

開発サーバーの ZMI で、いくつかのページ テンプレートを含む2 つのフォルダー/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 に答える