Question

Nous avons deux serveurs Zope en cours d'exécution site interne de l'entreprise. L'un est le site en direct et on est le site dev. Je travaille sur l'écriture d'un script python qui se déplace tout à partir du serveur dev au serveur en direct. En ce moment, le processus implique un tas d'étapes qui sont faites dans l'interface de gestion de Zope. Je dois faire tout ce que automatique pour qui gère l'exécution d'un scénario tout. Une chose que je dois faire est d'exporter un dossier à partir du serveur en direct afin que je puisse réimporter de nouveau dans le site en direct après la mise à jour. Comment puis-je faire à partir d'un script python?

Nous utilisons Zope 2.8 et Python 2.3.4

Était-ce utile?

La solution

Vous pouvez essayer d'utiliser les fonctions manage_exportObject et manage_importObject situé dans le fichier $ZOPE_HOME/lib/python/OFS/ObjectManager.py

Disons que nous installons deux Zope 2.8 cas situés à:

  • /tmp/instance/dev pour le serveur de développement (port 8080)
  • /tmp/instance/prod pour le serveur de production (port 9090)

Dans le ZMI du serveur de développement, je l'ai créé deux dossiers /MyFolder1 et /MyFolder2 contenant des modèles de page. Le script Python suivant exporte chaque dossier dans les fichiers .zexp, et les importe dans la ZMI de l'instance de production:

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

Autres conseils

Pour le rendre plus général et permettre de copier des dossiers pas dans le répertoire racine que je ferais quelque chose comme ceci:

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

Si je devais le représentant j'ajouter à l'autre réponse, mais hélas ... Si quelqu'un veut les fusionner, s'il vous plaît allez-y.

Si vous déplacez vraiment tout , vous pouvez probablement déplacer les Data.fs à la place. Mais sinon, l'import / export ci-dessus est une bonne façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top