2012-09-11 2 views
4

collective.logbook을 사용하여 사이트의 오류를 저장합니다. 일지는 획득 한 객체를 참조하는 오류의 기록을 작성하려고하기 때문에Plone : TypeError : 취득 래퍼에서 피클을 추출 할 수 없습니다.

File "/srv/plone/xxx/src/collective.logbook/collective/logbook/events.py", line 101, in hand 
    transaction.commit() 
    File "/srv/plone/buildout-cache/eggs/transaction-1.1.1-py2.6.egg/transaction/_manager.py", line 8 
    return self.get().commit() 
    File "/srv/plone/buildout-cache/eggs/transaction-1.1.1-py2.6.egg/transaction/_transaction.py", li 
    self._commitResources() 
    File "/srv/plone/buildout-cache/eggs/transaction-1.1.1-py2.6.egg/transaction/_transaction.py", li 
    rm.commit(self) 
    File "/srv/plone/buildout-cache/eggs/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/Connection.py", lin 
    self._commit(transaction) 
    File "/srv/plone/buildout-cache/eggs/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/Connection.py", lin 
    self._store_objects(ObjectWriter(obj), transaction) 
    File "/srv/plone/buildout-cache/eggs/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/Connection.py", lin 
    p = writer.serialize(obj) # This calls __getstate__ of obj 
    File "/srv/plone/buildout-cache/eggs/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/serialize.py", line 
    return self._dump(meta, obj.__getstate__()) 
    File "/srv/plone/buildout-cache/eggs/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/serialize.py", line 
    self._p.dump(state) 
TypeError: Can't pickle objects in acquisition wrappers. 

이 분명하다 : 현재 일지는 몇 가지 예외에 내 사이트에 실패합니다. 나는 해결책이 이런 종류의 객체들로부터 오류를 제거하는 것이라고 가정한다.

그러나 나쁜 객체가 무엇인지, 어떻게 트랜잭션 관리자로 끝나는 지, 그리고이 문제를 일으키는 파이썬 객체 참조는 무엇인지 알아낼 수 있습니까? 아니면이 문제를 디버깅하는 데 도움이 될만한 것이 있습니까? 당신이 안정적으로이 문제를 재현 할 수있는 경우

답변

3

있습니다 (ZODB 계란 내부 ZODB/connection.py 단위) ZODB 연결 _register 방법에 인쇄 문 또는 pdb.set_trace()에 넣을 수 있습니다 : 모든 객체는 다음과 같이 표시되었습니다 이제 때마다

def _register(self, obj=None): 
    # ... skipped lines ... 

    if obj is not None: 
     self._registered_objects.append(obj) 
     # Insert print statement here. 

을 변경되었거나 연결에 새 객체로 추가되면 콘솔에 인쇄됩니다. 디버깅 프로세스에 도움이됩니다. 행운을 빕니다!

+1

이 문제는 읽기 및 쓰기 개체와 관련이 있습니까? 쓰여지고있는 객체에만 플래그를 지정하는 방법은 없나요? –

+1

이것은 서면 개체에만 관련되어야합니다. 그들은 나중에 이어지는 커밋에 대한 연결로 등록됩니다. –

관련 문제