X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=5d2d3fc04cfc40520bbf3953fdbf413264414c7f;hb=27dad9301094f25bcedc66c476ec8b9d61521fb7;hp=3ad1701a2cb0a938e9ed9dddbc6e2a88cd144b72;hpb=1085c936f6ea024206a1aee192a87c4c9fc79087;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 3ad1701..5d2d3fc 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -16,7 +16,6 @@ use Catalyst::Utils; use Catalyst::Controller; use Data::OptList; use Devel::InnerPackage (); -use File::stat; use Module::Pluggable::Object (); use Text::SimpleTable (); use Path::Class::Dir (); @@ -37,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; } @@ -1249,7 +1249,7 @@ EOF A hook to attach modifiers to. This method does not do anything except set the C accessor. -Applying method modifiers to the C method doesn't work, because of quirky thingsdone for plugin setup. +Applying method modifiers to the C method doesn't work, because of quirky things done for plugin setup. Example: @@ -1692,8 +1692,8 @@ sub execute { $error = qq/Caught exception in $class->$name "$error"/; } $c->error($error); - $c->state(0); } + $c->state(0); } return $c->state; } @@ -1872,9 +1872,9 @@ sub finalize_headers { # get the length from a filehandle if ( blessed( $response->body ) && $response->body->can('read') || ref( $response->body ) eq 'GLOB' ) { - my $stat = stat $response->body; - if ( $stat && $stat->size > 0 ) { - $response->content_length( $stat->size ); + my $size = -s $response->body; + if ( $size ) { + $response->content_length( $size ); } else { $c->log->warn('Serving filehandle without a content-length'); @@ -2600,16 +2600,13 @@ sub engine_class { } sub setup_engine { - my ($class, $compat_requested_engine) = @_; + my ($class, $requested_engine) = @_; $class->engine_loader( Catalyst::EngineLoader->new({ application_name => $class, - (!defined $compat_requested_engine - ? () - : (compat_options => { - requested_engine => $compat_requested_engine, - })), + (defined $requested_engine + ? (requested_engine => $requested_engine) : ()), }), ); @@ -2668,14 +2665,28 @@ documentation on how to upgrade from Catalyst::Engine::PSGI. EOW } - return $app->_wrapped_legacy_psgi_app($app->psgi_app); + return $app->apply_default_middlewares($app->psgi_app); } -# 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. -sub _wrapped_legacy_psgi_app { +=head2 $c->apply_default_middlewares + +Adds the following L middlewares to your application, since they are +useful and commonly needed: + +L, (conditionally added based on the status +of your $ENV{REMOTE_ADDR}, and can be forced on with C +or forced off with C), L +(if you are using Lighttpd), L (always +applied since this middleware is smart enough to conditionally apply itself). + +Additionally if we detect we are using Nginx, we add a bit of custom middleware +to solve some problems with the way that server handles $ENV{PATH_INFO} and +$ENV{SCRIPT_NAME} + +=cut + + +sub apply_default_middlewares { my ($app, $psgi_app) = @_; $psgi_app = Plack::Middleware::Conditional->wrap( @@ -2701,23 +2712,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, @@ -3298,6 +3293,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