Domanda

Abbiamo due server Zope in esecuzione sito interno della nostra azienda. Uno è il sito dal vivo e uno è il sito dev. Sto lavorando su scrivendo uno script python che muove tutto dal server dev per il server di vivere. In questo momento il processo coinvolge una serie di passi che si fanno nell'interfaccia di gestione Zope. Ho bisogno di fare tutto ciò che automatico in modo che l'esecuzione di uno script di gestire tutto. Una cosa che ho bisogno di fare è esportare una cartella dal server di vivere in modo che possa reimportare di nuovo nel luogo in tensione dopo l'aggiornamento. Come posso fare questo da uno script Python?

Stiamo usando Zope 2.8 e Python 2.3.4

È stato utile?

Soluzione

Si può provare a utilizzare il manage_exportObject funzioni e manage_importObject trova nel file $ZOPE_HOME/lib/python/OFS/ObjectManager.py

diciamo installiamo due 2.8 istanze Zope situati a:

  • /tmp/instance/dev per il server di sviluppo (8080)
  • /tmp/instance/prod per il server di produzione (porta 9090)

Nella ZMI del server di sviluppo, ho creato due cartelle /MyFolder1 e /MyFolder2 contenente alcuni modelli di pagina. Il seguente script Python esporta ogni cartella in file .zexp, e li importa nel ZMI dell'istanza di produzione:

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

Altri suggerimenti

Per rendere questo più generale e consentire la copia di cartelle non nella directory principale che vorrei fare qualcosa di simile:

#!/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 avessi il rappresentante vorrei aggiungere questo per l'altra risposta, ma ahimè ... Se qualcuno vuole unirle, si prega di andare avanti.

Se davvero si sposta tutto si potrebbe probabilmente solo spostare le Data.fs invece. Ma per il resto l'import / export di cui sopra è un buon modo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top