}
use Moose;
-use Catalyst::Restarter;
use MooseX::Types::Moose qw/ArrayRef Str Bool Int/;
use namespace::autoclean;
with 'Catalyst::ScriptRole';
+__PACKAGE__->meta->get_attribute('help')->cmd_aliases('?');
+
has debug => (
traits => [qw(Getopt)],
cmd_aliases => 'd',
has host => (
traits => [qw(Getopt)],
+ cmd_aliases => 'h',
isa => Str,
is => 'ro',
default => 'localhost',
- documentation => 'Specify a host for the server to run on',
+ documentation => 'Specify an IP on this host for the server to bind to',
);
has fork => (
cmd_aliases => 'f',
isa => Bool,
is => 'ro',
- documentation => 'Fork the server',
+ default => 0,
+ documentation => 'Fork the server to be able to serve multiple requests at once',
);
-has listen => (
+has port => (
traits => [qw(Getopt)],
- cmd_aliases => 'l',
+ cmd_aliases => 'p',
isa => Int,
is => 'ro',
default => 3000,
- documentation => 'Specify a different listening port',
+ documentation => 'Specify a different listening port (to the default port 3000)',
);
has pidfile => (
cmd_aliases => 'k',
isa => Bool,
is => 'ro',
- documentation => 'Server keepalive',
-
+ default => 0,
+ documentation => 'Support keepalive',
);
has background => (
cmd_aliases => 'bg',
isa => Bool,
is => 'ro',
+ default => 0,
documentation => 'Run in the background',
);
cmd_aliases => 'r',
isa => Bool,
is => 'ro',
- documentation => 'use Catalyst::Restarter to detect code changes',
+ default => 0,
+ documentation => 'use Catalyst::Restarter to detect code changes and restart the application',
);
has restart_directory => (
cmd_aliases => 'rdir',
isa => ArrayRef[Str],
is => 'ro',
- predicate => '_has_restart_directory',
documentation => 'Restarter directory to watch',
+ predicate => '_has_restart_directory',
);
has restart_delay => (
traits => [qw(Getopt)],
- cmd_aliases => 'rdel',
+ cmd_aliases => 'rd',
isa => Int,
is => 'ro',
- predicate => '_has_restart_delay',
documentation => 'Set a restart delay',
+ predicate => '_has_restart_delay',
);
has restart_regex => (
traits => [qw(Getopt)],
- cmd_aliases => 'rxp',
+ cmd_aliases => 'rr',
isa => Str,
is => 'ro',
- predicate => '_has_restart_regex',
documentation => 'Restart regex',
+ predicate => '_has_restart_regex',
);
has follow_symlinks => (
cmd_aliases => 'sym',
isa => Bool,
is => 'ro',
- predicate => '_has_follow_symlinks',
+ default => 0,
documentation => 'Follow symbolic links',
-
+ predicate => '_has_follow_symlinks',
);
-sub run {
- my ($self) = shift;
+sub _restarter_args {
+ my $self = shift;
- if ( $self->debug ) {
- $ENV{CATALYST_DEBUG} = 1;
- }
+ my %args = (
+ argv => $self->ARGV,
+ start_sub => sub { $self->_run_application },
+ ($self->_has_follow_symlinks ? (follow_symlinks => $self->follow_symlinks) : ()),
+ ($self->_has_restart_delay ? (sleep_interval => $self->restart_delay) : ()),
+ ($self->_has_restart_directory ? (directories => $self->restart_directory) : ()),
+ ($self->_has_restart_regex ? (filter => qr/${\$self->restart_regex}/) : ()),
+ );
+
+ return %args;
+}
- # If we load this here, then in the case of a restarter, it does not
- # need to be reloaded for each restart.
- require Catalyst;
+sub run {
+ my $self = shift;
- # If this isn't done, then the Catalyst::Devel tests for the restarter
- # fail.
- $| = 1 if $ENV{HARNESS_ACTIVE};
+ local $ENV{CATALYST_DEBUG} = 1
+ if $self->debug;
if ( $self->restart ) {
die "Cannot run in the background and also watch for changed files.\n"
if $self->background;
+ # If we load this here, then in the case of a restarter, it does not
+ # need to be reloaded for each restart.
+ require Catalyst;
+
+ # If this isn't done, then the Catalyst::Devel tests for the restarter
+ # fail.
+ $| = 1 if $ENV{HARNESS_ACTIVE};
+
require Catalyst::Restarter;
my $subclass = Catalyst::Restarter->pick_subclass;
- my %args;
- $args{follow_symlinks} = $self->follow_symlinks
- if $self->_has_follow_symlinks;
- $args{directories} = $self->restart_directory
- if $self->_has_restart_directory;
- $args{sleep_interval} = $self->restart_delay
- if $self->_has_restart_delay;
- $args{filter} = qr/$self->restart_regex/
- if $self->_has_restart_regex;
-
+
my $restarter = $subclass->new(
- %args,
- start_sub => sub { $self->_run_application },
- argv => $self->ARGV,
+ $self->_restarter_args()
);
$restarter->run_and_watch;
sub _application_args {
my ($self) = shift;
return (
- $self->listen,
+ $self->port,
$self->host,
{
map { $_ => $self->$_ } qw/
-d --debug force debug mode
-f --fork handle each request in a new process
(defaults to false)
- -h --help display this help and exits
- --host host (defaults to all)
+ --help display this help and exits
+ -h --host host (defaults to all)
-p --port port (defaults to 3000)
-k --keepalive enable keep-alive connections
-r --restart restart when files get modified