2009-05-28 19 views
5

Tenemos dos servidores zope que ejecutan el sitio interno de nuestra empresa. Uno es el sitio en vivo y el otro es el sitio de desarrollo. Estoy trabajando en la escritura de un script de Python que mueve todo desde el servidor de desarrollo hasta el servidor en vivo. En este momento, el proceso implica una serie de pasos que se realizan en la interfaz de administración de zope. Necesito hacer todo eso de forma automática para que ejecutar una secuencia de comandos lo maneje todo. Una cosa que tengo que hacer es exportar una carpeta del servidor en vivo para que pueda volver a importarla al sitio en vivo después de la actualización. ¿Cómo puedo hacer esto desde un script python?Exportación de una carpeta zope con python

Estamos utilizando Zope y Python 2.8 2.3.4

Respuesta

4

Usted puede tratar de utilizar las funciones manage_exportObject y manage_importObject ubicada en el archivo $ZOPE_HOME/lib/python/OFS/ObjectManager.py

Digamos que instalar dos instancias Zope 2.8 ubicadas en:

  • /tmp/instance/dev para el servidor de desarrollo (puerto 8080)
  • /tmp/instance/prod del servidor de producción (puerto 9090)

En el ZMI del servidor de desarrollo, que han creado dos carpetas /MyFolder1 y /MyFolder2 contienen algunas plantillas de página. La siguiente secuencia de comandos de Python exporta cada carpeta de archivos .zexp, y los importa en el ZMI de la instancia de producción:

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

Esto es justo lo que estaba buscando. –

3

Para hacer esto más general y no permiten copiar carpetas en el directorio raíz que haría algo como esto :

#!/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 tuviera el representante me gustaría añadir esto a la otra respuesta, pero por desgracia ... Si alguien quiere fusionarlas, vaya por delante.

0

Si realmente mueve todo, probablemente pueda mover los Data.fs en su lugar. De lo contrario, la importación/exportación anterior es una buena forma.

+0

En realidad muevo todo excepto una carpeta. Por lo tanto, exportaré la única carpeta, moveré los data.fs y luego importaré la otra carpeta. –

Cuestiones relacionadas