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/ が返ってくるわけですよ。
と適当に変更してやると正常なコンテンツが返ってきます。絶対サーバ側で LWP 経由のアクセスに細工をしている訳なんですが、ユーザさんからの不具合申告を受けて調査した結果、僕も今日初めて知りました。他のサイトでも、こういったのってkyっこうあるのかしら?
どっちにしろ、LWP 経由で取得する場合、ちゃんとユーザエージェントで自分を名乗った方が良いって事ですね。まぁ当たり前と言えば当たり前かもね。
コメントやシェアをお願いします!
しょーご
CatalystのModel作成で、はまってました。
「その2)Can't locate object method "set_sql" とエラーがでる」
この対応方法で解決できました。
本当に助かりました。ありがとうございました。