Catalyst で static に DBIC の Schema を使いたい (補足)
http://d.hatena.ne.jp/magicalhat/20090114/1232003049
で書いた記事の補足。
上の記事までの内容だと、実際にサーバをスタートさせてアクセスしても
[error] DBI Exception: DBD::Pg::st execute failed: ERROR: relation "book" does not exist
と怒られます。
Schema::Loader でスキーマ (search_path) を指定して作成したけれども、実際に利用するときにはスキーマ名 (search_path) までは解決してくれないみたい。*1
というわけで、接続したら勝手に search_path を通すように Catalyst::Model::DBIC::Schema クラスの設定を書きます。
- lib/MyApp/Model/DBIC
package MyApp::Model::DBIC; use strict; use parent 'Catalyst::Model::DBIC::Schema'; __PACKAGE__->config( schema_class => 'MyApp::Schema', connect_info => [ 'dbi:Pg:database=mydb', 'user', 'passwd', # こっからかいた # 接続したら SQL を発行するように設定 { on_connect_do => [ 'SET SEARCH_PATH TO my_schema', ], } ], );
これで、接続したときに search_path をセットしてくれるようになりました。
わーい。
詳しくはお近くの Perldoc または CPAN で!
http://search.cpan.org/~bogdan/Catalyst-Model-DBIC-Schema-0.21/lib/Catalyst/Model/DBIC/Schema.pm
*1:ってゆー表現が正しいかは謎ですが