DBIx::Class::Schema::Loader(0.04004) で 2回 connect したら何か変。
package MySchema; use base qw/ DBIx::Class::Schema::Loader /; __PACKAGE__->loader_options( relationships => 1 ); 1;
package MySchema::Foo; use base qw/ DBIx::Class /; __PACKAGE__->load_components( qw/ InflateColumn::DateTime PK::Auto Core /); __PACKAGE__->add_columns( created_on => { data_type => 'datetime' } ); 1;
こういう定義で InflateColumn::DateTime を使うようにして、以下のようなコードを実行する。
use MySchema; my @dsn = qw/ dbi:Pg:dbname=testdb fujiwara /; $s1 = MySchema->connect(@dsn); print $s1->resultset('Foo')->find(1)->created_on->epoch, "\n"; $s2 = MySchema->connect(@dsn); print $s2->resultset('Foo')->find(1)->created_on->epoch, "\n";
実行結果
1196725255 Can't call method "epoch" without a package or object reference at s.pl line 7.
2回目の connect 後には Inflate されない。0.003012 だと大丈夫。
loader_options に debug => 1 を指定してみたら、0.03012 では初回 connect 時のみ DB のスキーマ定義を読んでいるのだが、0.04004 では 2回目の connect 時にも読み込んでいるような。このときに Inflate がおかしくなるのか。
なんで2回 connect する必要があったかというと、mod_perl のアプリケーション(それぞれ DBIC::Schema::Loader を使って、同じ DB に接続する)を 2つ、Apache に読み込んだから。
後からアプリケーションをひとつ追加した途端に、今まで動いていた方までぼろぼろになって焦った。