سؤال

لدينا اثنين من خوادم 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 بدلا من ذلك. ولكن وإلا فإن الاستيراد / التصدير أعلاه هو وسيلة جيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top