2011-04-28 2 views
3

우리는 결국 Plone (4) 사이트가 많은 Zope 서버를 운영하고 있습니다. 이제는 확장 제품 업데이트가 제공되며 프로필 설정의 변경 사항을 픽업하기 위해 다시 설치해야합니다 (예 : 새로운 콘텐츠 유형Plone 사이트 외부에서 portal_quickinstaller.reinstallProducts 양식을 어떻게 트리거합니까?

수동으로, 이것은 모든 Plone 사이트의 portal_quickinstaller을 수동으로 클릭하고 업데이트를 누릅니다. 수십 개의 사이트에 대해 이야기하는 경우 이는 그리 적절하지 않습니다. 따라서이 작업을 자동화하려고합니다. 실제로 내가 대신 하나의 플론 (Plone) 인스턴스의 긴 목록을 가지고, 나는 다시 설치 할 수 있습니다; 단순화

a = context.restrictedTraverse('/') 

p = a['Plone'] 
print p.getSiteManager() 
qi = p.restrictedTraverse('portal_quickinstaller') 
print qi 
qi.reinstallProducts('LinguaPlone') 

(: 기본적으로 지금까지, 나는 조프 루트에서 스크립트 (파이썬)로 다음과 같은 생활을 제품의 긴 목록)이 다음과 같이 실패 :. 내 디버깅 시도에서

Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 613, in uninstallProducts 
    Module Products.CMFQuickInstallerTool.InstalledProduct, line 272, in uninstall 
    Module Products.CMFQuickInstallerTool.InstalledProduct, line 351, in _cascadeRemove 
AttributeError: 'BaseGlobalComponents' object has no attribute 'objectItems' 

는 지금까지 BaseGlobalComponents는 조프 SiteManager는 zope.component.getSiteManager에 의해 반환됩니다. quickinstaller가 올바른 Planner를 구입하도록 유도하려면 어떻게해야합니까?

또는 설치를 자동화하기 위해 제품을 재설치하는 것이 어떨까요? (ETA : 이것은 당신이 자동 cronjob으로하는 일이 아니라는 것을 알고 있습니다. 그러나 내부 개발 제품의 업데이트는 피할 수 없습니다.)

답변

8

다음은 변경하는 방법입니다. 활성 로컬 사이트 관리자 Restricted Python에서는이 작업을 수행 할 수 없으므로 Python 스크립트를 외부 메서드 또는 브라우저보기로 변환해야합니다.

from zope.app.component.hooks import setHooks, setSite 
setHooks() 
setSite(site) 

setHooks 호출은 한 번만 수행하면됩니다. Zope 2.12에서는 이러한 호출을 zope.site.hooks 대신 가져오고 zope 2.13에서는 zope.component.hooks에서 가져와야합니다.

reinstallProducts를 호출하는 것이 모든 애드온 제품에 적합하지는 않으며, 재설치 한 내용을주의 깊게 확인하고 문제가 발생하지 않을 것이라는 점을 신중하게 확인하지 않는 한 권장되지 않습니다. 일부 제품은 작업을보다 선택적으로 실행하는 업그레이드 단계를 제공합니다.

+0

감사합니다. 찾고 있던 마법 ​​호출 일 수도 있습니다. 아침에 시도해 보겠습니다. 이 제품을 사용할 많은 제품에 대해 어느 정도의 제어권을 가지고 있기 때문에 문제는 적어도 학습 경험 일 것입니다. ;) –

4

면책 조항 : 정말로 하시겠습니까? 자동으로 제품을 최신 버전으로 다시 설치하고 업그레이드하면 준비된 인스턴스에서 아무런 테스트도없이 문제가 생길 것입니다.

어쨌든 XML-RPC와 약간의 조정을 통해 이러한 일을 할 수 있습니다. 당신이 Products.CMFQuickInstallerTool.QuickInstallerTool.py를 서브 클래스 필요 다시 설치하고 키워드 인수를 "이 방법으로 사용자 정의 QuickInstallerTool 당신을 제공하기 위해

>>> import xmlrpclib 
>>> proxy = xmlrpclib.ServerProxy(
     "http://admin:[email protected]:8080/Plone/portal_quickinstaller" 
    ) 
>>> proxy.getProductVersion('Marshall') 
'2.0' 
>>> proxy.isProductInstalled('Marshall') 
'False' 
>>> proxy.installProduct('Marshall') 
'Registry installed sucessfully.\n' 
>>> proxy.isProductInstalled('Marshall') 
'True' 

: 이것은 당신이 XML-RPC를 사용하여 라이브 실행중인 인스턴스에 제품을 설치하는 방법입니다 재설치 "는 기본적으로 '참'으로 설정됩니다. 같은 :

442c442 
<      swallowExceptions=None, reinstall=False, 
--- 
>      swallowExceptions=None, reinstall=True, 
452,457c452,457 
<   if self.isProductInstalled(p): 
<    prod = self._getOb(p) 
<    msg = ('This product is already installed, ' 
<     'please uninstall before reinstalling it.') 
<    prod.log(msg) 
<    return msg 
--- 
>   #if self.isProductInstalled(p): 
>   # prod = self._getOb(p) 
>   # msg = ('This product is already installed, ' 
>   #   'please uninstall before reinstalling it.') 
>   # prod.log(msg) 
>   # return msg 

더 나은 다음 XML-RPC 프로토콜과 호환되는 제품을, (당신이 키워드 인수를 전달할 수 없기 때문에) 버전에 대한 정보를 수집하고 다시 설치하는 자신의 방법을 제공한다.

XML-RPC를 통해이 작업을 수행하는 더 깨끗한 방법이있을 수 있지만 portal_quickinstaller는 이러한 방식으로 사용되지 않으며 에는 경고가있을 수 있습니다. 주의와 함께 사용.

0

처음에는 다시 설치하지 마십시오. 대부분의 경우 웹 사이트가 손상 될 수 있습니다.

다음으로 추가 기능이 업그레이드 단계를 제공 할 수 있다고 생각해야합니다 (대개의 경우). quickinstaller api를 사용하여이를 PythonScript로 구현하십시오. 그것은 좋지만 파일 시스템의 스크립트를 사용하여 수행 할 수도 있습니다. 여기에있는 예제를 확인하십시오 : http://svn.plone.org/svn/plone/plone.org/Products.PloneOrg/trunk/scripts/

또 다른 해결책은 Selenium IDE를 사용하여 한 사이트에 빠른 설치 프로그램을 기록하고 다른 웹 사이트에서 실행하기 위해 테스트 결과를 붙여 넣는 것입니다 (매우 이상한 것은 아닙니다. ?)

+0

사이트를 수동으로 설정하지 않으면 빠른 설치 프로그램 API가 Plone 사이트 내부에서 호출되었을 때만 작동합니다. 정확히 저의 걸림돌이었습니다. ;) –

0

나는 Plone 사이트 7 개가있는 인스턴스의 Zope 루트에이 python 스크립트가 있습니다. 당신이 가지고있는 것과 거의 같은 것처럼 보입니다. Plone 2.5 사이트 (예, 이전 버전)에서만 작동 할 수도 있지만, 3.x 및 4.x에서도 작동해야한다고 생각합니다. 어쩌면 결백 한보고 차이 (내가 간과하고있는)가 스크립트에서 오류를 일으킬 수 있습니다. 어쩌면 제한된 여행객이 여행을 떠납니다. (명확성을 위해 스크립트를 편집했습니다.)

+0

4.0.5에서 여전히 같은 오류가 발생합니다. 두려워하지만 찾으려 고하여 주셔서 감사합니다. –

관련 문제