Ubic-Service-Plack
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Ubic/Service/Plack.pm view on Meta::CPAN
package Ubic::Service::Plack;
{
$Ubic::Service::Plack::VERSION = '1.18';
}
use strict;
use warnings;
# ABSTRACT: Helper for running psgi applications with ubic and plackup
use base qw(Ubic::Service::Skeleton);
use Params::Validate qw(:all);
use Plack;
use Ubic::Daemon qw(:all);
my $plackup_command = $ENV{'UBIC_SERVICE_PLACKUP_BIN'} || 'plackup';
sub new {
my $class = shift;
my $params = validate(@_, {
server => { type => SCALAR },
app => { type => SCALAR },
app_name => { type => SCALAR, optional => 1 },
server_args => { type => HASHREF, default => {} },
user => { type => SCALAR, optional => 1 },
group => { type => SCALAR | ARRAYREF, optional => 1 },
status => { type => CODEREF, optional => 1 },
port => { type => SCALAR, regex => qr/^\d+$/, optional => 1 },
ubic_log => { type => SCALAR, optional => 1 },
stdout => { type => SCALAR, optional => 1 },
stderr => { type => SCALAR, optional => 1 },
proxy_logs => { type => BOOLEAN, optional => 1 },
pidfile => { type => SCALAR, optional => 1 },
cwd => { type => SCALAR, optional => 1 },
env => { type => HASHREF, optional => 1 },
});
return bless $params => $class;
}
sub pidfile {
my $self = shift;
return $self->{pidfile} if defined $self->{pidfile};
return "/tmp/$self->{app_name}.pid" if defined $self->{app_name};
return "/tmp/".$self->full_name.".pid";
}
sub bin {
my $self = shift;
my @cmd = split(/\s+/, $plackup_command);
my %args = (
server => $self->{server},
($self->{port} ? (port => $self->{port}) : ()),
$self->defaults,
%{$self->{server_args}},
);
for my $key (keys %args) {
my $cmd_key = (length $key == 1) ? '-' : '--';
$cmd_key .= $key;
my $v = $args{$key};
next unless defined $v;
if (ref $v eq 'ARRAY') {
for my $value (@$v) {
push @cmd, $cmd_key, $value;
}
}
else {
push @cmd, $cmd_key, $v;
}
}
push @cmd, $self->{app};
return \@cmd;
}
sub start_impl {
my $self = shift;
my $daemon_opts = {
bin => $self->bin,
pidfile => $self->pidfile,
term_timeout => 5, # TODO - configurable?
};
for (qw/ env cwd stdout stderr ubic_log /, ($Ubic::Daemon::VERSION gt '1.48' ? 'proxy_logs' : ())) {
$daemon_opts->{$_} = $self->{$_} if defined $self->{$_};
}
start_daemon($daemon_opts);
return;
}
sub stop_impl {
my $self = shift;
return stop_daemon($self->pidfile, { timeout => 7 });
}
sub status_impl {
my $self = shift;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 5.846 seconds using v1.00-cache-2.02-grep-82fe00e-cpan-48ebf85a1963 )