Class::DBIで永続化が切れなくてハマった

| コメント(3) | トラックバック(0)

WEB+DB PRESS vol33の「ライブドア構築ノウハウ大公開」でClass::DBIの永続化を切るには、Ima::DBIの内部でクロージャとして生成されるdb_Mainをオーバーライドすれば永続化を切ることができるという記述がありました。

これなんですが、先日あるアプリを作成しているときに、db_Mainをオーバーライドしても永続化されてしまうという現象にあいました。

いろいろ調べたり、にぽたんとかに聞いたりした結果、db_Mainをオーバーライドしているクラスで __PACKAGE__->set_db() もしくは __PACKAGE__->connection() をしていたのが悪かったということが判明しました。なぜなら __PACKAGE__->set_db() もしくは __PACKAGE__->connection() をすると、Ima::DBIではなくClass::DBIの内部でdb_Mainのクロージャが生成されてしまうためにdb_Mainをオーバーライドしている意味がなくなってしまうからなのです。

ということで、db_Mainをオーバーライドしたクラスでは__PACKAGE__->set_db()をしないようにしましょう。

トラックバック(0)

トラックバックURL: http://blog.clouder.jp/mt/mt-tb.cgi/654

コメント(3)

参考になりました。

参考になりました。

こちらこそ。

コメントする

検索

広告

OpenID対応しています OpenIDについて
Powered by Movable Type 4.22-ja