いかん,はやくプールに行かなくちゃ。
が,その前に深く潜って調べてみた。 ML で owaさん に報告いただいた現象だと思われる。
[現象]
ZMILocalizerで置換したdtml-translateタグをレンダリング中に,PTSが見つからなくてエラーになる。
以下のときにエラーが出る。
- キャッシュをクリアしたとき
- アクセスの多いサイトでキャッシュ中のオブジェクトが頻繁に追い出されるとき
dtml-translateタグで国際化メッセージをレンダリングしようとするとき,globalとして登録されているPTSのインスタンスを取得して置換を行う。PTSのインスタンスがキャッシュから追い出されるようなシチュエーションでエラーが起こる(ように考えられる)。
ZPTベースの国際化ではこの現象は起こらない。PlacelessTranslationService.PTSWrapperが,必要に応じてPTSのインスタンスを読み込むようになっているからである。
[対策]
PTSを直してもらう。dtml-translateでもWrapperを使うようにする。方法を提示しないと直してくれないだろうな。
あるいはZMILocalizer側でパッチをあてる。
ここにも困っている人がいるので,PTS自体を変えてもらうのがいいんだろうな。
http://zwiki.org/834PTSGivesRuntimeErrorZODBShouldntLoadStateForDuringAddWiki