[Catalyst] My experience porting to CataMoose
Daisuke Maki
daisuke at endeworks.jp
Tue May 12 03:16:09 GMT 2009
Hi,
I've switched an application of mine to CataMoose. Thanks for the hard
work, it's seems surprisingly stable for such a massive overhaul.
I've observed a few glitches / gotchas, they seem like things that
probably should be documented, but I'd like to share with the list
before writing them up:
1. MyApp->config->{home} and Catalyst::Upgrading
Catalyst::Upgrading suggests that the following is possible:
package MyApp;
use Moose;
extends 'Catalyst';
__PACKAGE__->setup( ... );
This is fine, but things gets a bit hairy when you mix this with calls
MyApp->config->{home} BEFORE setup(), for example:
package MyApp;
use Moose;
extends 'Catalyst';
__PACKAGE__->config(
'View::TT' => {
INCLUDE_PATH => __PACKAGE__->path_to('whatever')
}
);
__PACKAGE__->setup( .... );
path_to will return something like "/whatever" instead of
"/path/to/MyApp/whatever", because home isn't set. to get around it, you
would need to force setup_home() to be called, or say
package MyApp;
use Moose;
use Catalyst; # so import() gets called
extends 'Catalyst';
__PACKAGE__->config(...);
__PACKAGE__->setup(...);
2. Hooking to methods that Plugins use via method modifiers breaks
method dispatch
I got bit by this while depending on Catalyst::Plugin::Unicode, and
trying to hook a custom error handling mechanism at finalize().
I was doing this in MyApp.pm:
before finalize => sub {
my $c = shift;
$c->handle_exception if @{ $c->error };
};
At that moment, Catalyst::Plugin::Unicode's finalize() stopped from
being called. I fully expected MyApp->finalize() to trigger all the
plugins' finalize(), then Catalyst::finalize(), but it only called
MyApp::finalize() and Catalyst::finalize().
I never got exactly why this happens, but it seems to me like Moose's
Method object interacts oddly with the method dispatch. My fix was to do
override finalize => sub {
my $c = shift;
$c->handle_exception if @{ $c->error };
$c->next::method(@_); # doing super() didn't work here.
};
regards,
--d
P.S. MST: yes, this has been blogged:
http://mt.endeworks.jp/d-6/2009/05/moosification-catalyst-58.html
More information about the Catalyst
mailing list