続・Couldn't instantiate component。
昨日の...
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.
...と表示されているのが、気になってたので
ここを参考に、ちょっと調べてみる。
てな訳で、とりあえず怪しいのは x::Model::CDBI だなーと
コードを読んで見るも「use NEXT」とか出てこないので
その親のモジュール Catalyst::Mode::CDBI を見てみると、案の定
...とのこと。出たな、use NEXT。package Catalyst::Model::CDBI;
use strict;
use base qw/Catalyst::Base Class::DBI/;
use NEXT;
use Class::DBI::Loader;
our $VERSION = '0.11';
__PACKAGE__->mk_accessors('loader');
てな訳で、最新のバージョンは取ってこれないんだろうか?と
perl -MCPAN -e 'upgrade Catalyst::Model::CDBI' と打つも
「All modules are up to date for Catalyst::Model::CDBI」と表示されてしまい終了。
仕方ないので、cpan.org に行って、調べてみると
最新版は 0.12 らしいので、その tar.gz を wget してから
毎度の perl Makefile.pl 、 make 、 make install でインストール。
それから改めて ./script/x_server.pl を実行してみると、
めでたく「update your application」の文言は表示されなくなったのでした。
ちなみに 0.12 の Catalyst::Model::CDBI のコードは
...となってて、use NEXT の代わりに use MRO::Compat が使われていたのでした。package Catalyst::Model::CDBI;
# work around CDBI being incompatible with C3 mro, due to both Ima::DBI and Class::DBI::__::Base
# inheriting from Class::Data::Inheritable in an inconsistent order.
BEGIN {
require Class::DBI;
@Class::DBI::__::Base::ISA = grep { $_ ne 'Class::Data::Inheritable' } @Class::DBI::__::Base::ISA;
}
use strict;
use base qw/Catalyst::Component Class::DBI/;
use MRO::Compat;
use Class::DBI::Loader;
our $VERSION = '0.12';
__PACKAGE__->mk_accessors('loader');
それにしても、
...の文言はまだ表示されたままだなぁ。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.