frei

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

続・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 を見てみると、案の定

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');

...とのこと。出たな、use NEXT。

てな訳で、最新のバージョンは取ってこれないんだろうか?と

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 のコードは

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');

...となってて、use NEXT の代わりに use MRO::Compat が使われていたのでした。

それにしても、

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.

...の文言はまだ表示されたままだなぁ。