はちゅにっき

こっちのブログはまったり更新

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:ってゆー表現が正しいかは謎ですが