From: Florian Ragwitz Date: Sun, 27 Mar 2011 11:58:24 +0000 (+0100) Subject: Ignore old-style .psgi files X-Git-Tag: 5.89003~73 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=1085c936f6ea024206a1aee192a87c4c9fc79087 Ignore old-style .psgi files --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 6c1ef1e..3ad1701 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -2600,9 +2600,18 @@ sub engine_class { } sub setup_engine { - my ($class) = @_; - - $class->engine_loader(Catalyst::EngineLoader->new(application_name => $class)); + my ($class, $compat_requested_engine) = @_; + + $class->engine_loader( + Catalyst::EngineLoader->new({ + application_name => $class, + (!defined $compat_requested_engine + ? () + : (compat_options => { + requested_engine => $compat_requested_engine, + })), + }), + ); my $engine = $class->engine_class; Class::MOP::load_class($engine); @@ -2636,13 +2645,27 @@ sub _finalized_psgi_app { sub _setup_psgi_app { my ($app) = @_; - if (my $home = Path::Class::Dir->new($app->config->{home})) { + for my $home (Path::Class::Dir->new($app->config->{home})) { my $psgi_file = $home->file( Catalyst::Utils::appprefix($app) . '.psgi', ); - return Plack::Util::load_psgi($psgi_file) - if -e $psgi_file; + next unless -e $psgi_file; + my $psgi_app = Plack::Util::load_psgi($psgi_file); + + return $psgi_app + unless $app->engine_loader->needs_psgi_engine_compat_hack; + + # load_psgi ran a .psgi file doing ->setup_engine('PSGI'). That's what + # .psgi files generated by the old Engine::PSGI do. Those return an app + # coderef calling into MyApp->run, which doesn't work anymore, so we're + # just ignoring it and use the wrapped legacy psgi app + warn <<"EOW"; +Found a legacy Catalyst::Engine::PSGI .psgi file at ${psgi_file}. + +Its content has been ignored. Please consult the Catalyst::Upgrading +documentation on how to upgrade from Catalyst::Engine::PSGI. +EOW } return $app->_wrapped_legacy_psgi_app($app->psgi_app); diff --git a/lib/Catalyst/EngineLoader.pm b/lib/Catalyst/EngineLoader.pm index 3499b50..e59135b 100644 --- a/lib/Catalyst/EngineLoader.pm +++ b/lib/Catalyst/EngineLoader.pm @@ -12,6 +12,23 @@ has application_name => ( required => 1, ); +has compat_options => ( + traits => ['Hash'], + is => 'ro', + isa => 'HashRef', + default => sub { +{} }, + handles => { + has_compat_option => 'exists', + compat_option => 'get', + }, +); + +sub needs_psgi_engine_compat_hack { + my ($self) = @_; + return $self->has_compat_option('requested_engine') + && $self->compat_option('requested_engine') eq 'PSGI'; +} + has catalyst_engine_class => ( isa => 'Str', is => 'rw', @@ -117,4 +134,10 @@ Catalyst Contributors, see Catalyst.pm This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. +=begin Pod::Coverage + +needs_psgi_engine_compat_hack + +=end Pod::Coverage + =cut