X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FLoader.pm;h=0b81933c2f9c40d58a7650b213b1fee2cb8bd715;hb=acbecf084395e9b46e607a3fe244faa3c1bd3abb;hp=bb23841df6808bc1168edcb7cea826c40965f9c4;hpb=532f0516947cf047368e91150ca2ab1cfd4c1e64;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/Loader.pm b/lib/Catalyst/Engine/Loader.pm index bb23841..0b81933 100644 --- a/lib/Catalyst/Engine/Loader.pm +++ b/lib/Catalyst/Engine/Loader.pm @@ -1,19 +1,27 @@ package Catalyst::Engine::Loader; use Moose; use Catalyst::Exception; +use Catalyst::Utils; use namespace::autoclean; extends 'Plack::Loader'; +has application_name => ( + isa => 'Str', + is => 'ro', + required => 1, +); + around guess => sub { my ($orig, $self) = (shift, shift); my $engine = $self->$orig(@_); if ($engine eq 'Standalone') { if ( $ENV{MOD_PERL} ) { my ( $software, $version ) = - $ENV{MOD_PERL} =~ /^(\S+)\/(\d+(?:[\.\_]\d+)+)/; - + $ENV{MOD_PERL} =~ /^(\S+)\/(\d+(?:[\.\_]\d+)+)/; $version =~ s/_//g; + $version =~ s/(\.[^.]+)\./$1/g; + if ( $software eq 'mod_perl' ) { if ( $version >= 1.99922 ) { $engine = 'Apache2'; @@ -35,8 +43,57 @@ around guess => sub { } } } + + my $old_engine = Catalyst::Utils::env_value($self->application_name, 'ENGINE'); + if (!defined $old_engine) { # Not overridden + } + elsif ($old_engine =~ /^(CGI|FCGI|HTTP|Apache.*)$/) { + # Trust autodetect + } + elsif ($old_engine eq "HTTP::Prefork") { # Too bad if you're customising, we don't handle options + # write yourself a script to collect and pass in the options + $engine = "Starman"; + } + elsif ($old_engine eq "HTTP::POE") { + Catalyst::Exception->throw("HTTP::POE engine no longer works, recommend you use Twiggy instead"); + } + elsif ($old_engine eq "Zeus") { + Catalyst::Exception->throw("Zeus engine no longer works"); + } + else { + warn("You asked for an unrecognised engine '$old_engine' which is no longer supported, this has been ignored.\n"); + } + return $engine; }; -__PACKAGE__->meta->make_immutable( inline_constructor => 0 ); +# Force constructor inlining +__PACKAGE__->meta->make_immutable( replace_constructor => 1 ); + 1; + +__END__ + +=head1 NAME + +Catalyst::Engine::Loader - The Catalyst Engine Loader + +=head1 SYNOPSIS + +See L. + +=head1 DESCRIPTION + +Wrapper on L which resets the ::Engine if you are using some +version of mod_perl. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software. You can redistribute it and/or modify it under +the same terms as Perl itself. + +=cut