X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=d70d4c48a3c9d69bb5d393f9c749cfe55e87bdc2;hp=58d79eb1d88f4ee471e547192feac2dff6533b6b;hb=aceee8b5c5fa1198e7c77652ba58049d4582b8d8;hpb=7258c943d378f2d791350b6829d32f147adc52b9 diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 58d79eb..d70d4c4 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -30,6 +30,7 @@ use Class::C3::Adopt::NEXT; use List::MoreUtils qw/uniq/; use attributes; use String::RewritePrefix; +use Catalyst::EngineLoader; use utf8; use Carp qw/croak carp shortmess/; use Try::Tiny; @@ -70,18 +71,17 @@ our $GO = Catalyst::Exception::Go->new; #maybe we should just make them attributes with a default? __PACKAGE__->mk_classdata($_) for qw/components arguments dispatcher engine log dispatcher_class - engine_class context_class request_class response_class stats_class + engine_loader context_class request_class response_class stats_class setup_finished _psgi_app/; __PACKAGE__->dispatcher_class('Catalyst::Dispatcher'); -__PACKAGE__->engine_class('Catalyst::Engine'); __PACKAGE__->request_class('Catalyst::Request'); __PACKAGE__->response_class('Catalyst::Response'); __PACKAGE__->stats_class('Catalyst::Stats'); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.89000'; +our $VERSION = '5.89001'; sub import { my ( $class, @arguments ) = @_; @@ -1665,7 +1665,9 @@ sub execute { push( @{ $c->stack }, $code ); no warnings 'recursion'; - eval { $c->state( $code->execute( $class, $c, @{ $c->req->args } ) || 0 ) }; + # N.B. This used to be combined, but I have seen $c get clobbered if so, and + # I have no idea how, ergo $ret (which appears to fix the issue) + eval { my $ret = $code->execute( $class, $c, @{ $c->req->args } ) || 0; $c->state( $ret ) }; $c->_stats_finish_execute( $stats_info ) if $c->use_stats and $stats_info; @@ -2589,20 +2591,26 @@ Sets up engine. =cut +sub engine_class { + my $class = shift; + $class->engine_loader->catalyst_engine_class(@_); +} + sub setup_engine { my ($class) = @_; + $class->engine_loader(Catalyst::EngineLoader->new(application_name => $class)); + my $engine = $class->engine_class; Class::MOP::load_class($engine); if ($ENV{MOD_PERL}) { - require 'Catalyst/Engine/Loader.pm'; - my $apache = Catalyst::Engine::Loader->auto; + my $apache = $class->engine_loader->auto; # FIXME - Immutable $class->meta->add_method(handler => sub { my $r = shift; - my $app = $class->psgi_app; - $apache->call_app($r, $app); + my $psgi_app = $class->psgi_app; + $apache->call_app($r, $psgi_app); }); } @@ -2660,6 +2668,10 @@ sub setup_psgi_app { if -e $psgi_file; } + # Note - this is for back compatibility. Catalyst should not know + # or care about how it's deployed. The recommended way of + # configuring this is now to use the ReverseProxy middleware + # yourself if you want it in a .psgi file. return Plack::Middleware::Conditional->wrap( $app->raw_psgi_app, builder => sub { Plack::Middleware::ReverseProxy->wrap($_[0]) }, @@ -3225,6 +3237,8 @@ Yuval Kogman, C rainboxx: Matthias Dietrich, C +dd070: Dhaval Dhanani + =head1 LICENSE This library is free software. You can redistribute it and/or modify it under