frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

Couldn't instantiate component。

そーいやぁ、忙しくて

自分宅のCentOS on vmwareにインストールした Catalyst

mysql に繋げるテストしてないなぁ...。

てな訳で、ふと思い出して、久々にいじってみる。

かくして、DB関連モジュールをインストール。

perl -MCPAN -e 'install Catalyst::Helper::Model::CDBI'

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 してみる。

perl -MCPAN -e 'upgrade Catalyst::Runtime'

perl -MCPAN -e 'upgrade Catalyst::Devel'

...しかし、何も update された気配もなく。

じゃあ、もしかすると、今回使ってたアプリケーションを

catalyst.pl で作った時はモジュールが古かった?とかって事もあるのかしら?

などと適当なことを思い、再度 catalyst.pl から、やり直すも同じ結果。

うーん。よくわかんないけど、次のバージョンの Catalyst を待てって事かなぁ?

まぁ、動いたから、いっか。