package Catalyst::Script::FastCGI;
-
-BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' }
use Moose;
use MooseX::Types::Moose qw/Str Bool Int/;
+use Data::OptList;
use namespace::autoclean;
+sub _plack_engine_name { 'FCGI' }
+
with 'Catalyst::ScriptRole';
has listen => (
- cmd_aliases => 'l',
- isa => Int,
- is => 'ro',
+ traits => [qw(Getopt)],
+ cmd_aliases => 'l',
+ isa => Str,
+ is => 'ro',
documentation => 'Specify a listening port/socket',
);
has pidfile => (
- cmd_aliases => 'pid',
- isa => Str,
- is => 'ro',
+ traits => [qw(Getopt)],
+ cmd_aliases => [qw/pid p/],
+ isa => Str,
+ is => 'ro',
documentation => 'Specify a pidfile',
);
-has daemon => (
- isa => Bool,
- is => 'ro',
- cmd_aliases => 'd',
- documentation => 'Daemonize',
+has daemon => (
+ traits => [qw(Getopt)],
+ 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)',
);
-has manager => (
- isa => Str,
- is => 'ro',
- cmd_aliases => 'm',
- documentation => 'Use a different FastCGI manager', # FIXME
+has manager => (
+ traits => [qw(Getopt)],
+ isa => Str,
+ is => 'ro',
+ cmd_aliases => 'M',
+ documentation => 'Use a different FastCGI process manager class',
);
-has keep_stderr => (
- cmd_aliases => 'std',
- isa => Bool,
- is => 'ro',
+has keeperr => (
+ traits => [qw(Getopt)],
+ cmd_aliases => 'e',
+ isa => Bool,
+ is => 'ro',
documentation => 'Log STDERR',
);
has nproc => (
- cmd_aliases => 'np',
- isa => Int,
- is => 'ro',
- documentation => 'Specify an nproc', # FIXME
+ traits => [qw(Getopt)],
+ cmd_aliases => 'n',
+ isa => Int,
+ is => 'ro',
+ documentation => 'Specify a number of child processes',
);
-has detach => (
- cmd_aliases => 'det',
- isa => Bool,
- is => 'ro',
- documentation => 'Detach this FastCGI process',
+has title => (
+ traits => [qw(Getopt)],
+ cmd_aliases => 't',
+ isa => Str,
+ is => 'ro',
+ lazy => 1,
+ builder => '_build_proc_title',
+ documentation => 'Set the process title',
);
+sub _build_proc_title {
+ my ($self) = @_;
+ return sprintf 'perl-fcgi-pm [%s]', $self->application_name;
+}
+
+sub BUILD {
+ my ($self) = @_;
+ $self->title;
+}
+
+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/,
+ detach => [ 'daemon' ],
+ proc_title => [ 'title' ],
+ ])
+ );
+}
+
sub _application_args {
my ($self) = shift;
return (
$self->listen,
{
- nproc => $self->nproc,
- pidfile => $self->pidfile,
- manager => $self->manager,
- detach => $self->detach,
- keep_stderr => $self->keep_stderr,
+ nproc => $self->nproc,
+ pidfile => $self->pidfile,
+ manager => $self->manager,
+ detach => $self->daemon,
+ keep_stderr => $self->keeperr,
+ title => $self->title,
}
);
}
=head1 SYNOPSIS
-See L<Catalyst>.
+ myapp_fastcgi.pl [options]
+
+ Options:
+ -? --help display this help and exits
+ -l --listen Socket path to listen on
+ (defaults to standard input)
+ can be HOST:PORT, :PORT or a
+ filesystem path
+ -n --nproc specify number of processes to keep
+ to serve requests (defaults to 1,
+ requires -listen)
+ -p --pidfile specify filename for pid file
+ (requires -listen)
+ -d --daemon daemonize (requires -listen)
+ -M --manager specify alternate process manager
+ (FCGI::ProcManager sub-class)
+ or empty string to disable
+ -e --keeperr send error messages to STDOUT, not
+ to the webserver
+ -t --title set the process title
=head1 DESCRIPTION
-FIXME
+Run a Catalyst application as fastcgi.
=head1 AUTHORS