2011-04-13 2 views
2

로드 균형 조정과 관련된 것으로 의심되는 문제가 발생했습니다. 우리는 Apache 뒤에 4 ZEO 프런트 엔드 클라이언트를 가지고 있습니다. 때때로 (로그에서) 새 컨텐트 항목을 만들면 오류가 기록됩니다. 우리는 무슨 일이 일어나고 의심 무엇Plone 3.3.5의로드 밸런싱시 스티키 세션이 필요합니까?

2011-04-13T15:39:57 ERROR Zope.SiteErrorLog 1302701997.20.258830910503 https://x/intranet 
/portal_factory/MyType/xxx.2011-04-13.9797548037/xxx_edit 
ValueError: Unable to find 

는 portal_factory 저장 일시적으로 (우리는 이것을 확인하는 방법)을 ZEO 클라이언트 세션 저장소에서 항목을 생성하고이 스토리지가 ZEO 클라이언트간에 공유되지 않는 것입니다. 사용자가 저장을 클릭하면 유효성 검사 오류가 발생하고 브라우저가 편집 화면으로 돌아갑니다. 그런 다음이 편집 화면보기는 세션 저장소에 임시 "항목이 생성 중"이 아닌 다른 ZEO 클라이언트로 이동합니다.

그러나 전에로드 밸런싱 된 많은 Plone 사이트를 실행 해 왔으며 이전에는이 ​​문제에 대한 보고서가 없었기 때문에 오류 원인이 다른 것으로 의심되거나이 사이트에서 특정 요소가 동작을 유발할 수 있습니다. . 여기

은, 불행하게도, 매우 모호 몇 가지 관련 정보입니다 :

http://plone.org/documentation/kb/sticky-sessions-and-mod_proxy_balancer

답변

5

Plone 3에는 실제로 세션을 사용하는 개체 생성 논리에 여전히 남아있는 코드가 있습니다. Widget과 같은 인터페이스를 지원하기 위해 객체 생성이 여러 실제 요청에 분산되어 있습니다. 이 지원 및 코드는 Plone 4에서 사라졌습니다.

이 코드는 Plone 3에 액세스하는 데 의존합니다. 까다로운 점은 코드가 이미 다른 코드에서 만든 경우에만 코드가 세션을 사용한다는 것입니다. Plone의 코드 (Plone 3조차)는 처음부터 세션을 생성해야하므로 일반적으로 존재하지 않으므로 사용되지 않습니다. 그러나 사이트의 코드가 세션을 만들면 객체 작성 논리에서도이를 사용합니다. 대부분의 사이트에서이 문제가 보이지 않는 이유를 설명해야합니다.

단순히 request.SESSION을 호출하면 세션이 만들어지기 때문에이 모든 것이 특히 까다 롭습니다. 이에 대한 다른 API를 사용 Products.Archetypes에서 content_edit_impl.py 스크립트는 세션에 얻을 수 :

# Avoid implicitly creating a session if one doesn't exists 
session = None 
sdm = getToolByName(context, 'session_data_manager', None) 
if sdm is not None: 
    session = sdm.getSessionData(create=0) 

는 = 0은 아무도 아직 존재하지 않는 경우 세션을 생성 암시 적으로 방지하기 위해 API를 알려줍니다 만들 수 있습니다.

세션을 생성하는 코드를 찾으거나 아키타 입을 통해 세션 부분을 제거하거나 세션 저장소를 ZEO로 이동하여 모든 Zope 인스턴스에서 공유 할 수 있습니다. 트래픽이 많은 사이트에는 권장되지 않지만 단순한 시나리오에서는 제대로 작동합니다 (일부 힌트는 https://weblion.psu.edu/trac/weblion/wiki/TemporaryStorageInZeo).

1

귀하의 진단이 잘못; portal_factory 도구는 상태 비 저장이므로 세션 연관 관계가 필요하지 않습니다.

오류 메시지도 매우 모호하며 불완전 해 보입니다. 전체 추적에 대한 인스턴스 로그를 확인 했습니까?