2010年2月21日

続・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.
...の文言はまだ表示されたままだなぁ。

Posted by anigon at 01:52 PM

トラックバックURL:


http://anigon.net/cgi-bin/mt/mt-tb.cgi/575

「Couldn't instantiate component。」へ戻る | 「うまかー。」へ進む

上へ戻る