added MX::Types::Moose, cleaned up moar
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Script / FastCGI.pm
1 package Catalyst::Script::FastCGI;
2
3 BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' }
4 use FindBin qw/$Bin/;
5 use lib "$Bin/../lib";
6 use Pod::Usage;
7 use Moose;
8 use MooseX::Types::Moose qw/Str Bool Int/;
9 use namespace::autoclean;
10
11 with 'MooseX::Getopt';
12
13 has help => (
14     traits => [qw(Getopt)],
15     cmd_aliases => 'h',
16     isa => Bool,
17     is => 'ro',
18     documentation => qq{ display this help and exits },
19 );
20
21 has listen => (
22     traits => [qw(Getopt)],
23     cmd_aliases => 'l',
24     isa => Int,
25     is => 'ro',
26     default => "3000",
27     documentation => qq{ specify a different listening port }
28 );
29
30 has pidfile => (
31     traits => [qw(Getopt)],
32     cmd_aliases => 'pid',
33     isa => Str,
34     is => 'ro',
35     documentation => qq{ specify a pidfile }
36 );
37
38 has daemon => ( 
39     isa => Bool,   
40     is => 'ro', 
41     traits => [qw(Getopt)],
42     cmd_aliases => 'd', 
43     documentation => qq{ daemonize }
44 );
45
46 has manager => ( 
47     isa => Str,    
48     is => 'ro',
49     traits => [qw(Getopt)],
50     cmd_aliases => 'm',
51     documentation => qq{ use a different FastCGI manager } 
52 );
53
54 has keep_stderr => ( 
55     traits => [qw(Getopt)],
56     cmd_aliases => 'std', 
57     isa => Bool,   
58     is => 'ro',  
59     documentation => qq{ log STDERR }
60 );
61
62 has nproc => (
63     traits => [qw(Getopt)],
64     cmd_aliases => 'np',  
65     isa => Int,
66     is => 'ro',  
67     documentation => qq{ specify an nproc }
68 );
69
70 has detach => ( 
71     traits => [qw(Getopt)],
72     cmd_aliases => 'det', 
73     isa => Bool,   
74     is => 'ro',  
75     documentation => qq{ detach this FastCGI process }
76 );
77
78 has _app => (
79     reader   => 'app',
80     init_arg => 'app',
81     traits => [qw(NoGetopt)],
82     isa => Str,
83     is => 'ro',
84 );
85
86 sub run {
87     my $self = shift;
88
89     pod2usage() if $self->help;
90     my $app = $self->app;
91     Class::MOP::load_class($app);
92     $app->run(
93         $self->listen,
94         {
95             nproc   => $self->nproc,
96             pidfile => $self->pidfile,
97             manager => $self->manager,
98             detach  => $self->detach,
99             keep_stderr => $self->keep_stderr,
100         }
101     );
102
103 }
104
105 __PACKAGE__->meta->make_immutable;
106
107 1;