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 )