質問
当社の社内サイトは 2 台の zope サーバーで実行されています。1 つはライブ サイト、もう 1 つは開発サイトです。私は開発サーバーからライブサーバーにすべてを移動するPythonスクリプトの作成に取り組んでいます。現時点では、このプロセスには、zope 管理インターフェイスで実行される一連の手順が含まれています。1 つのスクリプトを実行するだけですべてが処理されるように、これらすべてを自動化する必要があります。行う必要があることの 1 つは、更新後にライブ サイトに再インポートできるように、ライブ サーバーから 1 つのフォルダーをエクスポートすることです。Python スクリプトからこれを行うにはどうすればよいですか?
Zope 2.8 と Python 2.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')
他のヒント
これは、より一般的にし、ルートディレクトリに、私はこのような何かをするだろうではないフォルダをコピーできるようにするには:
#!/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をを移動することができます。しかし、そうでない場合は上記のインポート/エクスポートは良い方法です。