Class::DBI キャッシュするな!

Class::DBI 0.96 以降のキャッシュ機構が mod_perl 環境で悪さをする件。

startup.pl に

 $Class::DBI::Weaken_Is_Available = 0;

と書いておけば OK …… ではなかった。

普通に $obj = Obj->retrieve($id); などとして取ってくる場合は上記記述でキャッシュしなくなるのだが、 might_have を使って透過的に他のテーブルからデータを持ってきた場合、そっちがキャッシュされたままになる。

むう。

仕方ないので、Catalyst の begin にて

 Obj->clear_object_index;

として明示的にキャッシュ破棄してくれと頼むことに。