Catalyst の Catalyst::Helper::Model::CDBI でいつもハマる・・・orz

何か、Catalyst をいろんな環境にインストールするたびに、Helper スクリプトを実行して、create model CDBI するといつも同じエラーで躓くので備忘録として記事にしておこうと思いました。

その1)Class::DBI::mysql をインストールし忘れる

perl myapp_create.pl model CDBI CDBI dbi:mysql:WebService testid testpw
 exists "/home/apache/tmp/MyAPP/script/../lib/MyAPP/Model"
 exists "/home/apache/tmp/MyAPP/script/../t"
created "/home/apache/tmp/MyAPP/script/../lib/MyAPP/Model/CDBI.pm"
Couldn't require loader class "Class::DBI::Loader::mysql", "Can't locate Class/DBI/mysql.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.7/x86_64-linux-thread-multi /usr/local/lib/perl5/5.8.7 /usr
/local/lib/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/local/lib/perl5/site_perl/5.8.7 /usr/local/lib/perl5/site_perl .) at /usr/local/lib/perl5/site_perl/5.8.7/Class/DBI/Loader/mysql.pm line
 8, <DATA> line 1.
Compilation failed in require at (eval 15) line 2, <DATA> line 1.
BEGIN failed--compilation aborted at (eval 15) line 2, <DATA> line 1.
" at /usr/local/lib/perl5/site_perl/5.8.7/Class/DBI/Loader.pm line 81, <DATA> line 1.

解決方法→ perl -MCPAN -e 'install Class::DBI::mysql' を実行

- スポンサーリンク -


その2)Can't locate object method "set_sql" とエラーがでる

perl myapp_create.pl model CDBI CDBI dbi:mysql:WebService testid testpw
 exists "/home/apache/tmp/MyAPP/script/../lib/MyAPP/Model"
 exists "/home/apache/tmp/MyAPP/script/../t"
 exists "/home/apache/tmp/MyAPP/script/../lib/MyAPP/Model/CDBI.pm"
Couldn't require loader class "Class::DBI::Loader::mysql", "Can't locate object method "set_sql" via package "Class::DBI::mysql" at /usr/local/lib/perl5/site_perl/5.8.7/Class/DBI/mysql.pm line 58.
Compilation failed in require at /usr/local/lib/perl5/site_perl/5.8.7/Class/DBI/Loader/mysql.pm line 8.
Compilation failed in require at (eval 15) line 2.
BEGIN failed--compilation aborted at (eval 15) line 2.
" at /usr/local/lib/perl5/site_perl/5.8.7/Class/DBI/Loader.pm line 81.

解決方法→ /usr/local/lib/perl5/site_perl/5.x.x/Class/DBI/Loader.pm に require Class::DBI; を追加

取りあえず、これで解決。Class::DBI::Loader の方は、なんか手順が違う気がしてならないけど、まぁこれでエラーが回避できるので良しとしています。ほんと、単なる備忘録なので、この記事内での Catalyst 関連情報はこれだけ。


備忘録ついでで更にメモなのですが、JUGEM に LWP でアクセスすると、強制的に各ユーザのトップページにリダイレクトされるみたい。例えば、

'_request' => bless( {
    '_content' => '',
    '_uri' => bless( do{\(my $o = 'http://sunact.jugem.cc/?eid=489')}, 'URI::http' ),
    '_headers' => bless( {
                    'user-agent' => 'libwww-perl/5.803',
                    'range' => 'bytes=0-99999'
                }, 'HTTP::Headers' ),
    '_method' => 'GET'
}, 'HTTP::Request' )

な感じの GET アクセスをするわけですが、 http://sunact.jugem.cc/ が返ってくるわけですよ。

$ua->agent("hogehoge/0.01");

と適当に変更してやると正常なコンテンツが返ってきます。絶対サーバ側で LWP 経由のアクセスに細工をしている訳なんですが、ユーザさんからの不具合申告を受けて調査した結果、僕も今日初めて知りました。他のサイトでも、こういったのってkyっこうあるのかしら?

どっちにしろ、LWP 経由で取得する場合、ちゃんとユーザエージェントで自分を名乗った方が良いって事ですね。まぁ当たり前と言えば当たり前かもね。

- スポンサーリンク -