Class: CapistranoScale::CapistranoIntegration

Inherits:
Object
  • Object
show all
Defined in:
lib/capistrano-scale/capistrano_integration.rb

Class Method Summary collapse

Class Method Details

.load_into(capistrano_config) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/capistrano-scale/capistrano_integration.rb', line 6

def self.load_into(capistrano_config)
  capistrano_config.load do
    namespace :scale_copy do

      desc "Internal hook that updates the aws_install.sh script to latest if the deploy completed"
      task :store_aws_install_script_on_success do
        install_cmd_path = fetch(:s3_install_cmd_path)

        if install_cmd_path
          aws_credentials = {
            :aws_access_key_id     => capistrano_config[:aws_access_key_id],
            :aws_secret_access_key => capistrano_config[:aws_secret_access_key]
          }
          aws_connection = Fog::Storage::AWS.new(aws_credentials)
          aws_directory = aws_connection.directories.create(
            :key        => capistrano_config[:aws_releases_bucket],
            :public     => false
          )
          logger.debug "Uploading #{install_cmd_path} initialization script to S3"
          key = "#{rails_env}/#{application}/aws_install.sh"
          existing = aws_directory.files.get(key)
          existing.destroy if existing
          file = aws_directory.files.new(
            :key        => key,
            :body       => File.open(install_cmd_path),
            :acl        => 'public-read',
            :encryption => 'AES256'
          )
          begin
            file.save
            logger.debug "AWS Install script uploaded in #{key}"
          rescue => e
            raise(Capistrano::Error, "S3 File upload failed: #{e.class.to_s}:#{e.message}")
          end
        end
      end
    end

    after 'deploy', 'scale_copy:store_aws_install_script_on_success'
  end
end