X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=596422c68e9ba76cd94658f7f0995393c3cb361d;hb=89cb63ec32ead40a2ba223fce60016e3c19ce5ab;hp=2f4938441e1fc653b756e62fb7ff6a35c9f8da9d;hpb=a26a6adbaa05988a49cf8867afccdc0cfc5bd417;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 2f49384..596422c 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -36,6 +36,7 @@ use Try::Tiny; use Plack::Middleware::Conditional; use Plack::Middleware::ReverseProxy; use Plack::Middleware::IIS6ScriptNameFix; +use Plack::Middleware::LighttpdScriptNameFix; BEGIN { require 5.008004; } @@ -2409,7 +2410,27 @@ Starts the engine. =cut -sub run { my $c = shift; return $c->engine->run( $c, $c->_finalized_psgi_app, @_ ) } +sub run { + my $c = shift; + $c->engine_loader->needs_psgi_engine_compat_hack ? + $c->_run_needs_psgi_engine_compat_hack(@_) : + $c->engine->run( $c, $c->_finalized_psgi_app, @_ ); +} + +sub _run_needs_psgi_engine_compat_hack { + my $c = shift; + + ## We assume if they used the classic PSGI Engine, they must has CC:M + for my $metal (Catalyst::Controller::Metal->metals_for($c)) { + my $res = $metal->call(@_); + if (defined $res && !(ref $res eq 'ARRAY' && $res->[0] == 404)) { + return $res; + } + } + + ## If we got this far, just do the psgi app + $c->_finalized_psgi_app->(@_) +} =head2 $c->set_action( $action, $code, $namespace, $attrs ) @@ -2697,23 +2718,7 @@ sub _wrapped_legacy_psgi_app { # If we're running under Lighttpd, swap PATH_INFO and SCRIPT_NAME # http://lists.scsys.co.uk/pipermail/catalyst/2006-June/008361.html - # Thanks to Mark Blythe for this fix - # - # Note that this has probably the same effect as - # Plack::Middleware::LighttpdScriptNameFix and we should switch to that if - # we can. - $psgi_app = Plack::Middleware::Conditional->wrap( - $psgi_app, - condition => $server_matches->(qr/lighttpd/), - builder => sub { - my ($to_wrap) = @_; - return sub { - my ($env) = @_; - $env->{PATH_INFO} ||= delete $env->{SCRIPT_NAME}; - return $to_wrap->($env); - }; - }, - ); + $psgi_app = Plack::Middleware::LighttpdScriptNameFix->wrap($psgi_app); $psgi_app = Plack::Middleware::Conditional->wrap( $psgi_app, @@ -3294,6 +3299,10 @@ rainboxx: Matthias Dietrich, C dd070: Dhaval Dhanani +=head1 COPYRIGHT + +Copyright (c) 2005, the above named PROJECT FOUNDER and CONTRIBUTORS. + =head1 LICENSE This library is free software. You can redistribute it and/or modify it under