2009-05-28 6 views
5

Nous avons deux serveurs Zope qui exécutent le site interne de notre société. L'un est le site en direct et l'autre est le site de développement. Je travaille sur l'écriture d'un script python qui déplace tout du serveur de dev au serveur live. En ce moment, le processus implique un tas d'étapes qui sont effectuées dans l'interface de gestion de zope. J'ai besoin de rendre tout cela automatique afin que l'exécution d'un script gère tout. Une chose que je dois faire est d'exporter un dossier du serveur en direct afin que je puisse le réimporter dans le site en direct après la mise à jour. Comment puis-je faire cela à partir d'un script python?Exportation d'un dossier zope avec python

Nous utilisons Zope 2.8 et python

Répondre

4
2.3.4

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, j'ai créé deux dossiers /MyFolder1 et /MyFolder2 contenant des modèles de page. Le script Python 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:[email protected]:8080/manage_exportObject?id=' + id) 

    shutil.move('/tmp/instance/dev/var/' + id + '.zexp', '/tmp/instance/prod/import/' + id + '.zexp') 

    urllib.urlopen('http://admin:[email protected]:9090/manage_delObjects?ids=' + id) 
    urllib.urlopen('http://admin:[email protected]:9090/manage_importObject?file=' + id + '.zexp') 
+0

C'est exactement ce que je cherchais. –

3

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

#!/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:%[email protected]%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:%[email protected]%s/%smanage_delObjects?ids=%s' % (username_prod, password_prod, url_prod, path, id)) 
    urllib.urlopen('http://%s:%[email protected]%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.

0

Si vous déplacez vraiment tout vous pourriez probablement déplacer simplement le Data.fs à la place. Mais sinon, l'importation/exportation ci-dessus est un bon moyen.

+0

En fait, je déplace tout sauf un dossier. Ainsi, j'exporte le dossier un, déplace le data.fs, puis réimporte le dossier dans. –

Questions connexes