ASP4
view release on metacpan or search on metacpan
sbin/asp4-deploy view on Meta::CPAN
);
$src or die "Usage: $0 --src=</path/to/MyApp_2011-11-29_12.03.34.tar.gz> [--target=/var/www/appname/]\n";
my $start_cwd = cwd();
my ($id) = $src =~ m{\b/?([^/]+?\d\d\d\d\-\d\d\-\d\d_\d\d\.\d\d\.\d\d)\.tar\.gz$}
or die "Invalid --src: '$src' does not match the standard filename.\n";
if( $target )
{
-d $target && chdir($target)
or die "Invalid --target: '$target': $!\n";
}# end if()
if( -d 'latest' )
{
`rm -f deploying`;
# Copy over the config files:
`tar -zxvf "$src" && ln -s "$id" deploying`;
my @test_errors = ( );
foreach( grep { $_ !~ m{latest/common$} } <latest/*> )
{
my ($folder) = $_ =~ m{latest/([^/]+)};
`cp -rf latest/$folder/conf/* deploying/$folder/conf/`;
chdir("deploying/$folder");
unless( eval { runtests( <t/*/*.t> ) } ) #/
{
push @test_errors, $@;
}# end unless()
}# end foreach()
chdir($start_cwd);
if( @test_errors )
{
die "Tests failed:\n", join "\n", @test_errors;
}# end if()
`rm -rf latest`;
`rm -rf deploying`;
`ln -s "$id" latest`;
}
else
{
`tar -zxvf "$src" && ln -s "$id" latest`;
my @to_update = ( );
my @files = qw( asp4-config.json httpd.conf );
foreach( grep { $_ !~ m{latest/common$} } <latest/*> )
{
my ($folder) = $_ =~ m{latest/([^/]+)};
foreach my $file ( @files )
{
if( (stat("latest/$folder/conf/$file.template"))[7] )
{
`cp latest/$folder/conf/$file.template latest/$folder/conf/$file`;
push @to_update, "latest/$folder/conf/$file";
}# end if()
}# end foreach()
}# end foreach()
warn "\n\n***You must update the following configuration files:***\n";
warn join( "\n", map {"\t* $_"} @to_update), "\n\n";
}# end if()
=pod
=head1 NAME
asp4-deploy - Deploy your prepared ASP4 application.
=head1 USAGE
asp4-deploy --src=/path/to/MyWeb_2011-11-15_23.59.39.tar.gz [--target=/var/www/myweb.com]
=head1 ARGUMENTS
=head2 --src=/path/to/MyWeb_2011-11-15_23.59.39.tar.gz
Required.
=head2 --target=/var/www/myweb.com
Optional. Defaults to the current directory.
=head1 DESCRIPTION
C<asp4-deploy> behaves differently the B<first time> you deploy an app than it does
the second, third or tenth times.
=head2 The First Deployment
=over 4
=item Step 1
Unzips the tar.gz archive into the target folder.
=item Step 2
Copies all the C<conf/*.template> files to be non-template files.
eg:
cp conf/asp4-config.json.template conf/asp4-config.json
cp conf/httpd.conf.template conf/httpd.conf
=item Step 3
Makes a symbolic link from C</the/target/path/latest/> to C</the/target/path/MyWeb_2011-11-15_23.59.39>.
=item Step 4
You update your C<conf/asp4-config.json> and C<conf/httpd.conf> to work for the new environment.
You run your tests:
prove -r t/
If everything checks out, then you update your server's other configuration (eg: /etc/apache2/sites-enabled/*) to include:
/the/target/path/latest/www/conf/httpd.conf
( run in 1.241 second using v1.01-cache-2.11-cpan-39bf76dae61 )