2009-05-28 8 views
5

Mamy dwa serwery zope z wewnętrzną stroną naszej firmy. Jedna to strona na żywo, a druga to strona dla programistów. Pracuję nad pisaniem skryptu Pythona, który przenosi wszystko z serwera do serwera na żywo. Obecnie proces obejmuje kilka kroków, które są wykonywane w interfejsie zarządzania zope. Muszę zrobić to wszystko automatycznie, aby uruchomienie jednego skryptu zajmowało się wszystkim. Jedną rzeczą, którą muszę zrobić, to wyeksportować jeden folder z serwera na żywo, aby móc go ponownie zaimportować z powrotem do witryny na żywo po aktualizacji. Jak mogę to zrobić ze skryptu Pythona?Eksportowanie folderu zope z pytonem

Używamy Zope 2.8 i Python 2.3.4

Odpowiedz

4

Można spróbować użyć funkcji manage_exportObject i manage_importObject znajduje się w pliku $ZOPE_HOME/lib/python/OFS/ObjectManager.py

powiedzmy możemy zainstalować dwa zope 2,8 wystąpień pod adresem:

  • /tmp/instance/dev dla serwera rozwoju (port 8080)
  • /tmp/instance/prod na serwerze produkcyjnym (port 9090)

W ZMI serwera rozwoju utworzyłem dwa foldery /MyFolder1 i /MyFolder2 zawierające niektóre szablony stron. Poniższy skrypt Pythona eksportuje każdy folder w plikach .zexp i importuje je w ZMI instancji produkcji:

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

Tego właśnie szukałem. –

3

Aby to bardziej ogólny i nie zezwala na kopiowanie folderów w katalogu głównym chciałbym zrobić coś takiego :

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

Gdybym miał rep dodam to do drugiej odpowiedzi, ale niestety ... Jeśli ktoś chce je połączyć, przejdź do przodu.

0

Jeśli naprawdę poruszysz wszystko, co możesz po prostu przenieść Data.fs zamiast tego. Ale w przeciwnym razie dobry import/eksport to dobry sposób.

+0

Rzeczywiście przenoszę wszystko poza jednym folderem. Dlatego wyeksportuję jeden folder, przenoszę plik data.fs, a następnie zaimportuję ponownie jeden folder. –