X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FScript%2FFastCGI.pm;h=f4fd2e708b81aa0cc1051b61ba2475e93fab0a97;hp=a67aa5709a591b79e2fb030ee034bc0af7ae82ed;hb=eefc03e12890c06c9a76d78b4d68e3b2ad781328;hpb=182f8b1e3c426d62337e186c2409c555794152d7 diff --git a/lib/Catalyst/Script/FastCGI.pm b/lib/Catalyst/Script/FastCGI.pm index a67aa57..f4fd2e7 100644 --- a/lib/Catalyst/Script/FastCGI.pm +++ b/lib/Catalyst/Script/FastCGI.pm @@ -1,8 +1,7 @@ package Catalyst::Script::FastCGI; use Moose; -use MooseX::Types::Moose qw/Str Bool Int/; use Data::OptList; -use namespace::autoclean; +use namespace::clean -except => [ 'meta' ]; sub _plack_engine_name { 'FCGI' } @@ -11,7 +10,7 @@ with 'Catalyst::ScriptRole'; has listen => ( traits => [qw(Getopt)], cmd_aliases => 'l', - isa => Str, + isa => 'Str', is => 'ro', documentation => 'Specify a listening port/socket', ); @@ -19,14 +18,14 @@ has listen => ( has pidfile => ( traits => [qw(Getopt)], cmd_aliases => [qw/pid p/], - isa => Str, + isa => 'Str', is => 'ro', documentation => 'Specify a pidfile', ); has daemon => ( traits => [qw(Getopt)], - isa => Bool, + isa => 'Bool', is => 'ro', cmd_aliases => [qw/d detach/], # Eww, detach is here as we fucked it up.. Deliberately not documented documentation => 'Daemonize (go into the background)', @@ -34,7 +33,7 @@ has daemon => ( has manager => ( traits => [qw(Getopt)], - isa => Str, + isa => 'Str', is => 'ro', cmd_aliases => 'M', documentation => 'Use a different FastCGI process manager class', @@ -43,7 +42,7 @@ has manager => ( has keeperr => ( traits => [qw(Getopt)], cmd_aliases => 'e', - isa => Bool, + isa => 'Bool', is => 'ro', documentation => 'Log STDERR', ); @@ -51,14 +50,14 @@ has keeperr => ( has nproc => ( traits => [qw(Getopt)], cmd_aliases => 'n', - isa => Int, + isa => 'Int', is => 'ro', documentation => 'Specify a number of child processes', ); has proc_title => ( traits => [qw(Getopt)], - isa => Str, + isa => 'Str', is => 'ro', lazy => 1, builder => '_build_proc_title', @@ -75,22 +74,42 @@ sub BUILD { $self->proc_title; } +# Munge the 'listen' arg so that Plack::Handler::FCGI will accept it. +sub _listen { + my ($self) = @_; + + if (defined (my $listen = $self->listen)) { + return [ $listen ]; + } else { + return undef; + } +} + sub _plack_loader_args { my ($self) = shift; - return ( - map { $_->[0] => $self->${ \($_->[1] ? $_->[1]->[0] : $_->[0]) } } - Data::OptList::mkopt([ - qw/pidfile listen manager nproc keep_stderr proc_title/, - detach => [ 'daemon' ], - ]) - ); + + my $opts = Data::OptList::mkopt([ + qw/manager nproc proc_title/, + pid => [ 'pidfile' ], + daemonize => [ 'daemon' ], + keep_stderr => [ 'keeperr' ], + listen => [ '_listen' ], + ]); + + my %args = map { $_->[0] => $self->${ \($_->[1] ? $_->[1]->[0] : $_->[0]) } } @$opts; + + # Plack::Handler::FCGI thinks manager => undef means "use no manager". + delete $args{'manager'} unless defined $args{'manager'}; + + return %args; } -sub _application_args { - my ($self) = shift; +around _application_args => sub { + my ($orig, $self) = @_; return ( $self->listen, { + %{ $self->$orig }, nproc => $self->nproc, pidfile => $self->pidfile, manager => $self->manager, @@ -99,9 +118,10 @@ sub _application_args { proc_title => $self->proc_title, } ); -} +}; __PACKAGE__->meta->make_immutable; +1; =head1 NAME @@ -134,6 +154,10 @@ Catalyst::Script::FastCGI - The FastCGI Catalyst Script Run a Catalyst application as fastcgi. +=head1 SEE ALSO + +L + =head1 AUTHORS Catalyst Contributors, see Catalyst.pm