Pergunta

Nós temos dois servidores Zope que executam o site interno da nossa empresa. Um deles é o site ao vivo e um é o site desenv. Eu estou trabalhando em escrever um script python que move tudo, desde o servidor dev para o servidor ao vivo. Neste momento, o processo envolve um monte de etapas que são feitas na interface de gerenciamento do Zope. Eu preciso fazer tudo o que tão automático que a execução de um alças de script tudo. Uma coisa que eu preciso fazer é exportar uma pasta a partir do servidor ao vivo para que eu possa reimportar-lo de volta para o site ao vivo após a atualização. Como posso fazer isso a partir de um script python?

Estamos usando Zope 2.8 e python 2.3.4

Foi útil?

Solução

Você pode tentar usar as funções manage_exportObject e manage_importObject localizado no arquivo $ZOPE_HOME/lib/python/OFS/ObjectManager.py

Vamos dizer que instalar dois Zope 2,8 casos localizados em:

  • /tmp/instance/dev para o servidor de desenvolvimento (porta 8080)
  • /tmp/instance/prod para o servidor de produção (porta 9090)

Na ZMI do servidor de desenvolvimento, criei duas pastas /MyFolder1 e /MyFolder2 contendo alguns modelos de página. Os seguintes exportações Script Python cada pasta em arquivos .zexp e as importações los na ZMI da instância de produção:

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

Outras dicas

Para tornar isso mais geral e permitem copiar pastas não no diretório raiz que eu faria algo assim:

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

Se eu tivesse o representante Gostaria de acrescentar isso à outra resposta, mas infelizmente ... Se alguém quer fundi-los, por favor, vá em frente.

Se você realmente mover tudo você poderia provavelmente apenas mover os Data.fs vez. Mas caso contrário, a importação / exportação acima é um bom caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top