App-Padadoy
view release on metacpan or search on metacpan
lib/App/Padadoy.pm view on Meta::CPAN
$self->msg('data/');
mkdir 'data';
$self->msg('dotcloud.yml');
write_file( 'dotcloud.yml',{no_clobber => 1},
"www:\n type: perl\n approot: app" );
my $content = read_file(dist_file('App-Padadoy','index.pl.tpl'));
$self->msg("perl/index.pl");
make_path("perl");
write_file('perl/index.pl',{no_clobber => 1},$content);
my %symlinks = (libs => 'app/lib','app/deplist.txt' => 'deplist.txt');
while (my ($from,$to) = each %symlinks) {
$self->msg("$from -> $to");
symlink $to, $from;
}
# TODO:
# .openshift/ - hooks for OpenShift (o)
# action_hooks/ - scripts that get run every git push (o)
}
sub deplist {
my $self = shift;
eval "use Perl::PrereqScanner";
fail "Perl::PrereqScanner required" if $@;
fail "not implemented yet";
# TODO: dependencies should be detectable automatically
# with Perl::PrereqScanner::App
$self->msg("You must initialize a git repository and add remotes");
}
sub init {
my $self = shift;
$self->msg("Initializing environment");
fail "Expected to run in ".$self->{base}
unless cwd eq $self->{base};
fail 'Expected to run in an EMPTY base directory'
if grep { $_ ne $0 and $_ ne 'padadoy.yml' } <*>;
$self->_provide_config('init');
try {
my $out = capture('git', 'init', '--bare', $self->{repository});
$self->msg(\'init',$_) for split "\n", $out;
} catch {
fail 'Failed to init git repository in ' . $self->{repository};
};
my $file = $self->{repository}.'/hooks/update';
$self->msg("$file as executable");
write_file($file, read_file(dist_file('App-Padadoy','update')));
chmod 0755,$file;
$file = $self->{repository}.'/hooks/post-receive';
$self->msg("$file as executable");
write_file($file, read_file(dist_file('App-Padadoy','post-receive')));
chmod 0755,$file;
$self->msg("logs/");
mkdir 'logs';
$self->msg("app -> current/app");
symlink 'current/app','app';
$self->msg("Pushing to git repository %s@%s:%s will update",
$self->{user}, hostname, $self->{repository});
}
sub config {
say shift->_config;
}
sub _config {
my $self = shift;
Dump( { map { $_ => $self->{$_} // '' } @configs } );
}
sub restart {
my $self = shift;
my $pid = $self->_pid;
if ($pid) {
$self->msg("Gracefully restarting starman as deamon on port %d (pid in %s)",
$self->{port}, $self->{pidfile});
run('kill','-HUP',$pid);
} else {
$self->start;
}
}
sub start {
my $self = shift;
fail "No configuration file found" unless $self->{config};
chdir $self->{base}.'/app';
if (0) { # FIXME
# check whether dependencies are satisfied
my @out = split "\n", capture('carton check --nocolor 2>&1');
if (@out > 1) { # carton check always seems to exit with zero (?!)
$out[0] =
_msg( *STDERR, \'start', $_) for @out;
exit 1;
}
}
# make sure log files exist
my $logs = catdir($self->{base},'logs');
make_path($logs) unless -d $logs;
foreach ( grep { ! -e $_ }
map { catfile($logs,$_) } qw(error.log access.log) ) {
( run in 0.507 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )