Version 0.02
[catagits/CatalystX-Script-Server-Starman.git] / lib / CatalystX / Script / Server / Starman.pm
1 package CatalystX::Script::Server::Starman;
2 use Moose;
3 use MooseX::Types::Moose qw/ Str Int /;
4 use Pod::Usage;
5 use Pod::Find qw(pod_where);
6 use namespace::autoclean;
7
8 our $VERSION = '0.02';
9
10 extends 'Catalyst::Script::Server';
11
12 has '+fork' => ( default => 1, init_arg => undef );
13
14 has [qw/ keepalive restart restart_delay restart_regex restart_directory/] => ( init_arg => undef, is => 'ro' );
15
16 has workers => (
17     isa => Int,
18     is => 'ro',
19     default => 5,
20 );
21
22 has [qw/
23     min_servers
24     min_spare_servers
25     max_spare_servers
26     max_servers
27     max_requests
28     backlog
29 /] => ( isa => Int, is => 'ro' );
30
31 has [qw/
32     user
33     group
34 /] => ( isa => Str, is => 'ro' );
35
36 around _plack_loader_args => sub {
37     my ($orig, $self, @args) = @_;
38     my %out = $self->$orig(@args);
39     foreach my $key (qw/
40         workers
41         min_servers
42         min_spare_servers
43         max_spare_servers
44         max_servers
45         max_requests
46         backlog
47         user
48         group
49     /) {
50         $out{$key} = $self->$key();
51     }
52     return %out;
53 };
54
55 sub _getopt_full_usage {
56     my $self = shift;
57     pod2usage( -input => pod_where({-inc => 1}, __PACKAGE__), -verbose => 2 );
58     exit 0;
59 }
60
61 1;
62
63 =head1 NAME
64
65 CatalystX::Script::Server::Starman - Replace the development server with Starman
66
67 =head1 SYNOPSIS
68
69     myapp_server.pl [options]
70
71        -d --debug           force debug mode
72        -f --fork            handle each request in a new process
73                             (defaults to false)
74        -? --help            display this help and exits
75        -h --host            host (defaults to all)
76        -p --port            port (defaults to 3000)
77        --follow_symlinks    follow symlinks in search directories
78                             (defaults to false. this is a no-op on Win32)
79        --background         run the process in the background
80        --pidfile            specify filename for pid file
81        --workers            Initial number of workers to spawn (defaults to 5)
82        --min_servers        Minimum number of worker processes runnning
83        --min_spare_servers  Minimum number of spare workers (more are forked
84                             if there are less spare than this)
85        --max_spare_servers  Maximum number of spare workers (workers are killed
86                             if there are more spare than this)
87        --max_servers        Maximum number of workers in total.
88        --max_requests       Maximum number of requests each worker will handle
89        --backlog            Number of backlogged connections allowed
90        --user               User to run as
91        --group              Group to run as
92
93      See also:
94        perldoc Starman
95        perldoc plackup
96        perldoc Catalyst::PSGI
97
98 =head1 DESCRIPTION
99
100 A Catalyst extension to replace the development server with L<Starman>.
101
102 This module replaces the functionality of L<Catalyst::Engine::HTTP::Prefork>,
103 which is now deprecated.
104
105 It provides access to the prefork engine specific options which were previously
106 added by hacking your server script.
107
108 =head1 Adding this to your application
109
110 Just add a server script module to your application which inherits from this
111 package.
112
113 L<Catalyst::ScriptRunner> will automatically detect and use it when
114 script/myapp_server.pl is started.
115
116 For example:
117
118     package MyApp::Script::Server;
119     use Moose;
120     use namespace::autoclean;
121
122     extends 'CatalystX::Script::Server::Starman';
123
124     1;
125
126 =head1 SEE ALSO
127
128 L<plackup> - can be used to start your application C<.psgi> under Starman
129
130 L<Catalyst::PSGI>
131
132 =head1 AUTHOR
133
134 Tomas Doran (t0m) C<< <bobtfish@bobtfish.net> >>
135
136 =head1 COPYRIGHT & LICENSE
137
138 Copyright 2009 the above author(s).
139
140 This sofware is free software, and is licensed under the same terms as perl itself.
141
142 =cut
143