use Catalyst::Controller;
use Data::OptList;
use Devel::InnerPackage ();
-use File::stat;
use Module::Pluggable::Object ();
use Text::SimpleTable ();
use Path::Class::Dir ();
use Plack::Middleware::Conditional;
use Plack::Middleware::ReverseProxy;
use Plack::Middleware::IIS6ScriptNameFix;
+use Plack::Middleware::LighttpdScriptNameFix;
BEGIN { require 5.008004; }
return $c->_filter_component( $comp, @args ) if $comp;
}
+ return
+ if $c->config->{disable_component_resolution_regex_fallback};
+
# This is here so $c->comp( '::M::' ) works
my $query = ref $name ? $name : qr{$name}i;
A hook to attach modifiers to. This method does not do anything except set the
C<setup_finished> accessor.
-Applying method modifiers to the C<setup> method doesn't work, because of quirky thingsdone for plugin setup.
+Applying method modifiers to the C<setup> method doesn't work, because of quirky things done for plugin setup.
Example:
$error = qq/Caught exception in $class->$name "$error"/;
}
$c->error($error);
- $c->state(0);
}
+ $c->state(0);
}
return $c->state;
}
# 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');
}
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) : ()),
}),
);
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<Plack> middlewares to your application, since they are
+useful and commonly needed:
+
+L<Plack::Middleware::ReverseProxy>, (conditionally added based on the status
+of your $ENV{REMOTE_ADDR}, and can be forced on with C<using_frontend_proxy>
+or forced off with C<ignore_frontend_proxy>), L<Plack::Middleware::LighttpdScriptNameFix>
+(if you are using Lighttpd), L<Plack::Middleware::IIS6ScriptNameFix> (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(
# 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,
my $class = ref $proto || $proto;
Class::MOP::load_class( $plugin );
- $class->log->warn( "$plugin inherits from 'Catalyst::Component' - this is decated and will not work in 5.81" )
+ $class->log->warn( "$plugin inherits from 'Catalyst::Component' - this is deprecated and will not work in 5.81" )
if $plugin->isa( 'Catalyst::Component' );
$proto->_plugins->{$plugin} = 1;
unless ($instant) {
dd070: Dhaval Dhanani <dhaval070@gmail.com>
+=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