use Plack::Middleware::Conditional;
use Plack::Middleware::ReverseProxy;
use Plack::Middleware::IIS6ScriptNameFix;
+use Plack::Middleware::LighttpdScriptNameFix;
BEGIN { require 5.008004; }
=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 )
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 {
+# FIXME - document me
+
+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,
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