# Capistrano::S3::Copy This is a revised implementation of the ideas in Bill Kirtleys capistrano-s3 gem. I have a requirement to push new deployments via capistrano, but also to retain the last deployed package in S3 for the purposes of auto-scaling. This gem use Capistrano's own code to build the tarball package, but instead of deploying it to each machine, we deploy it to a configured S3 bucket (using s3cmd), then deploy it from there to the known nodes from the capistrano script. At some point, I aim to persist a shell script to accompany the package. This will be used to instruct a fresh AWS instance how to locate, download and install he S3 package as if it was deployed via capistrano. ## Installation Add these line to your application's Gemfile: group :development do gem 'capstrano-s3-copy' end And then execute: $ bundle Or install it yourself as: $ gem install capistrano-s3-copy ## Usage In your deploy.rb file, we need to tell Capistrano to adopt our new strategy: set :deploy_via, :s3_copy Then we need to provide AWS account details to authorize the upload/download of our package to S3 set :aws_access_key_id, ENV['AWS_ACCESS_KEY_ID'] set :aws_secret_access_key, ENV['AWS_SECRET_ACCESS_KEY'] Finally, we need to indicate which bucket to store the packages in: set :aws_s3_copy_bucket, 'mybucket-deployments' The package will be stored in S3 prefixed with a rails_env that was set in capistrano: e.g. S3://mybucket-deployment/production/201204212007.tar.gz ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Added some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request