Couldn't instantiate component。
そーいやぁ、忙しくて
自分宅のCentOS on vmwareにインストールした Catalyst で
mysql に繋げるテストしてないなぁ...。
てな訳で、ふと思い出して、久々にいじってみる。
かくして、DB関連モジュールをインストール。
perl -MCPAN -e 'install Class::DBI::mysql'
それから、テスト用の database と テーブルを用意し、
./script/xxx_create.pl model CDBI CDBI DBI:mysql:test ユーザー名 パスワード
などと打って、Model 部分を自動で作ってもらったつもりが。
...が。
./script/xxx_server.pl と打つと、何やら見慣れないエラーが。
require x::Model::CDBI::Test was successful but the package is not defined.
at /usr/local/lib/perl5/site_perl/5.10.1/Catalyst/Utils.pm line 286.
Couldn't instantiate component "x::Model::CDBI", "Inconsistent hierarchy during
C3 merge of class 'Class::DBI::__::Base': merging failed on parent
'Class::Data::Inheritable' at /usr/local/lib/perl5/5.10.1/i686-linux-thread-multi/mro.pm
line 24."Compilation failed in require at /home/anigon/Hello/script/x_server.pl line 66.
・・・はて?
仕方ないので、あれこれググって
これとか、あれこれ見つけるも、
「これだー!」という解決方法が見つからず、
しばし途方に暮れる。
う"ー、Class::DBI::Loader のバージョンは 0.34 だしなぁ...。
ふー。夕飯でも作るか。
じゅーじゅー。(←フライパンで焼いてる)
そして夕飯後。
改めて気合を入れてググった結果、継承順に問題があるらしいとかって話を見かけ
試しに Catalyst モジュールを書き換えてみる。
・/usr/local/lib/perl5/site_perl/5.10.1/Class/DBI.pm
use base qw(Class::Accessor Class::Data::Inheritable Ima::DBI);
↓
use base qw(Ima::DBI Class::Data::Inheritable Class::Accessor);
それから、再び xxx_server.pl で起動してみると、
今度は違う文言が表示されつつも、起動は出来た模様。
ふーむ。それでいいのか?
その文言をよく読むと、こんな事が書いてある。
x::Model::CDBI is using the deprecated Catalyst::Base,
update your application as this will be removed in the next major release
at /usr/local/lib/perl5/site_perl/5.10.1/Catalyst/Base.pm line 7.
はぁ、your application って言われてもなぁ。
Catalyst を新しくしろって事なのかな?
それとも、一部の Plugin とか?と思いつつ
とりあえず Catalyst の update してみる。
...しかし、何も update された気配もなく。
じゃあ、もしかすると、今回使ってたアプリケーションを
catalyst.pl で作った時はモジュールが古かった?とかって事もあるのかしら?
などと適当なことを思い、再度 catalyst.pl から、やり直すも同じ結果。
うーん。よくわかんないけど、次のバージョンの Catalyst を待てって事かなぁ?
まぁ、動いたから、いっか。