문제

우리 회사 내부 사이트를 운영하는 두 개의 zope 서버가 있습니다.하나는 라이브 사이트이고 하나는 개발 사이트입니다.저는 개발 서버에서 라이브 서버로 모든 것을 이동하는 Python 스크립트를 작성하는 중입니다.현재 프로세스에는 영역 관리 인터페이스에서 수행되는 여러 단계가 포함됩니다.하나의 스크립트를 실행하여 모든 것을 처리할 수 있도록 모든 것을 자동으로 만들어야 합니다.내가 해야 할 한 가지는 업데이트 후 라이브 사이트로 다시 가져올 수 있도록 라이브 서버에서 폴더 하나를 내보내는 것입니다.Python 스크립트에서 이 작업을 어떻게 수행할 수 있나요?

우리는 Zope 2.8과 Python 2.3.4를 사용하고 있습니다.

도움이 되었습니까?

해결책

기능을 사용해 볼 수 있습니다 manage_exportObject 그리고 manage_importObject 파일에 위치 $ZOPE_HOME/lib/python/OFS/ObjectManager.py

다음 위치에 두 개의 Zope 2.8 인스턴스를 설치한다고 가정해 보겠습니다.

  • /tmp/instance/dev 개발 서버용(포트 8080)
  • /tmp/instance/prod 프로덕션 서버의 경우(포트 9090)

개발 서버의 ZMI에는 두 개의 폴더를 만들었습니다. /MyFolder1 그리고 /MyFolder2 일부 페이지 템플릿이 포함되어 있습니다.다음 Python 스크립트는 각 폴더를 .zexp 파일로 내보내고 이를 프로덕션 인스턴스의 ZMI로 가져옵니다.

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

다른 팁

이를 보다 일반적으로 만들고 루트 디렉터리에 없는 폴더 복사를 허용하려면 다음과 같이 합니다.

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

담당자가 있었다면 이것을 다른 답변에 추가했지만 아쉽습니다 ...누군가 병합하고 싶다면 계속하세요.

진짜 이사하면 모든 것 대신 Data.fs를 이동할 수도 있습니다.하지만 그렇지 않으면 위의 가져오기/내보내기가 좋은 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top