سؤال
لدينا اثنين من خوادم ZAKE التي تدير الموقع الداخلي لشركتنا. واحد هو الموقع المباشر وواحد هو موقع ديف. أنا أعمل على كتابة البرنامج النصي Python الذي ينقل كل شيء من خادم Dev إلى الخادم المباشر. في الوقت الحالي، تنطوي العملية على مجموعة من الخطوات التي تتم في واجهة إدارة ZOPE. أحتاج إلى جعل كل هذا التلقائي بحيث تشغيل البرنامج النصي واحد يعالج كل شيء. شيء واحد أحتاج إلى القيام به هو تصدير مجلد واحد من الخادم المباشر حتى أتمكن من إعادة تشغيله مرة أخرى في الموقع المباشر بعد التحديث. كيف يمكنني القيام بذلك من النصي الثعبان؟
نحن نستخدم Zope 2.8 و Python 2.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')
نصائح أخرى
لجعل هذا أكثر عمومية والسماح بنسخ المجلدات غير الموجودة في الدليل الجذر الأول أود أن أفعل شيئا مثل هذا:
#!/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))
إذا كان لدي مندوب سأضيف هذا إلى الإجابة الأخرى ولكن للأسف ... إذا أراد شخص ما دمجها، فيرجى المضي قدما.
إذا انتقلت حقا كل شيء ربما يمكنك فقط نقل البيانات .fs بدلا من ذلك. ولكن وإلا فإن الاستيراد / التصدير أعلاه هو وسيلة جيدة.