Frage

Wir haben zwei Zope-Server unseres Unternehmens interne Website ausgeführt wird. Eine davon ist die Live-Site und ist die Entwickler-Website. Ich arbeite einen Python-Skript zu schreiben, das alles von dem Dev-Server auf den Live-Server bewegt. Momentan befindet sich der Prozess umfasst eine Reihe von Schritten, die in der Zope-Management-Interface durchgeführt werden. Ich muss das alles machen automatische, so dass ein Skript ausgeführt erledigt alles. Eine Sache, die ich tun muß, ist einen Ordner aus dem Live-Server exportieren, so dass ich es wieder in die Live-Site nach dem Update wieder importieren kann. Wie kann ich das aus einem Python-Skript?

Wir verwenden Zope 2.8 und Python 2.3.4

War es hilfreich?

Lösung

Sie können versuchen, die Funktionen manage_exportObject und manage_importObject in der Datei $ZOPE_HOME/lib/python/OFS/ObjectManager.py befindet verwenden

Lassen Sie sagen, wir zwei Zope 2.8-Instanzen installieren sie unter:

  • /tmp/instance/dev für den Entwicklungs-Server (Port 8080)
  • /tmp/instance/prod für den Produktionsserver (Port 9090)

Im ZMI des Entwicklungs-Server, ich habe zwei Ordner erstellt /MyFolder1 und /MyFolder2 einige Seitenvorlagen enthalten. Das folgende Python-Skript exportiert jeden Ordner in .zexp Dateien und importiert sie in ZMI der Produktion Beispiel:

#!/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')

Andere Tipps

Um dies zu allgemein und Kopieren von Ordnern erlauben nicht im Stammverzeichnis würde ich so etwas tun:

#!/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))

Wenn ich die rep hatte ich möchte hinzufügen, diese auf die andere Antwort, aber leider ... Wenn jemand will, um sie zu verschmelzen, gehen Sie bitte weiter.

Wenn Sie wirklich bewegen alles Sie könnten wahrscheinlich nur die Data.fs stattdessen bewegen. Aber sonst der Import / Export-oben ist ein guter Weg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top