Pregunta

Tenemos dos servidores Zope sitio interno de nuestra empresa. Uno de ellos es el sitio en vivo y uno es el sitio prog. Estoy trabajando en escribir un script en Python que se mueve todo, desde el servidor dev para el servidor en vivo. En este momento el proceso implica un montón de pasos que se realizan en la interfaz de Administración de Zope. Necesito hacer todo lo automático, de manera que la ejecución de un script se encarga de todo. Una cosa que tengo que hacer es exportar una carpeta del servidor en vivo para que pueda volver a importar de nuevo en el sitio en vivo después de la actualización. ¿Cómo puedo hacer esto desde un script en Python?

Estamos utilizando Zope y Python 2.8 2.3.4

¿Fue útil?

Solución

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

Vamos decimos que instalar dos instancias Zope 2.8 ubicados 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, he creado dos carpetas /MyFolder1 y /MyFolder2 contiene 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: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')

Otros consejos

Para hacer esto más general y permitir la copia de carpetas no en el directorio raíz me gustaría hacer 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:%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 tuviera el representante me gustaría añadir esto a la otra respuesta, pero por desgracia ... Si alguien quiere fusionarlas, vaya por delante.

Si realmente se mueve todo que probablemente podría simplemente mover los Data.fs lugar. Pero por lo demás la importación / exportación de arriba es una buena manera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top