2

plone 3.3.2 から plone 4.2.1 への移行は PosKeyError で失敗します。この記事http://plonechix.blogspot.com/2009/12/definitive-guide-to-poskeyerror.htmlのレシピを試しました。error_finder スニペットを実行しましたが、例外はありませんでした。また、デバッガーでオブジェクトを取得しようとしましたがapp.mysite._p_jar[p64(oid)]、成功しませんでした。同じエラーで失敗します。

壊れたオブジェクトを削除したり、少なくともオブジェクトに関する詳細情報 (クラス名や場所など) を取得したりするにはどうすればよいですか?

完全なトレースバック:

POSKeyError('\x00\x00\x00\x00\x00\x0ey=',)
(Also, the following error occurred while attempting to render the standard error message, please see the event log for full details:
An operation previously failed, with traceback: 
File "/Users/makmak/Plone/buildout-cache/eggs/Zope2-2.13.16-py2.7.egg/ZServer/PubCore/ZServerPublisher.py", line 31, in __init__
  response=b) 
File "/Users/makmak/Plone/buildout-cache/eggs/Zope2-2.13.16-py2.7.egg/ZPublisher/Publish.py", line 443, in publish_module
  environ, debug, request, response)
File "/Users/makmak/Plone/buildout-cache/eggs/Zope2-2.13.16-py2.7.egg/ZPublisher/Publish.py", line 237, in publish_module_standard
  response = publish(request, module_name, after_list, debug=debug)
File "/Users/makmak/Plone/buildout-cache/eggs/Zope2-2.13.16-py2.7.egg/ZPublisher/Publish.py", line 134, in publish
  transactions_manager.commit()
File "/Users/makmak/Plone/buildout-cache/eggs/Zope2-2.13.16-py2.7.egg/Zope2/App/startup.py", line 301, in commit
  transaction.commit()
File "/Users/makmak/Plone/buildout-cache/eggs/transaction-1.1.1-py2.7.egg/transaction/_manager.py", line 89, in commit
  return self.get().commit()
File "/Users/makmak/Plone/buildout-cache/eggs/transaction-1.1.1-py2.7.egg/transaction/_transaction.py", line 336, in commit
  t, v, tb = self._saveAndGetCommitishError()
File "/Users/makmak/Plone/buildout-cache/eggs/transaction-1.1.1-py2.7.egg/transaction/_transaction.py", line 329, in commit
  self._commitResources()
File "/Users/makmak/Plone/buildout-cache/eggs/transaction-1.1.1-py2.7.egg/transaction/_transaction.py", line 443, in _commitResources
  rm.commit(self)
File "/Users/makmak/Plone/buildout-cache/eggs/ZODB3-3.10.5-py2.7-macosx-10.4-x86_64.egg/ZODB/Connection.py", line 572, in commit
  oid, serial, transaction)
File "/Users/makmak/Plone/buildout-cache/eggs/ZODB3-3.10.5-py2.7-macosx-10.4-x86_64.egg/ZODB/BaseStorage.py", line 416, in checkCurrentSerialInTransaction
  committed_tid = self.getTid(oid)
File "/Users/makmak/Plone/buildout-cache/eggs/ZODB3-3.10.5-py2.7-macosx-10.4-x86_64.egg/ZODB/FileStorage/FileStorage.py", line 770, in getTid
  with self._lock:
File "/Users/makmak/Plone/buildout-cache/eggs/ZODB3-3.10.5-py2.7-macosx-10.4-x86_64.egg/ZODB/FileStorage/FileStorage.py", line 403, in _lookup_pos
  raise POSKeyError(oid)
POSKeyError: 0x0e793d
4

2 に答える 2

0

これは、カタログへのオブジェクトの追加を含むセーブポイントがロールバックされた場合に発生する問題と同じだと思います。これはZODBのバグだと思いますが、セーブポイントをロールバックしているもの、この場合はファイルとイメージのBLOBへの移行に対処することで回避できます。したがって、これらのファイルまたはイメージがBLOBに正常に移行されないようにする(または単に削除する)原因を修正すると、成功するはずです。

于 2012-11-21T18:00:14.997 に答える
0

fsrefs.py を使用して、不良オブジェクトを見つけることができます。

それを使用するための非常に短い記事は次のとおりです

于 2012-09-21T01:49:24.867 に答える