capistrano-s3_archive 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f929af3d48043349bb6daae12fbab57f89944eff
4
+ data.tar.gz: 795364463429bd33d45273d179ee4164d8b1d6b9
5
+ SHA512:
6
+ metadata.gz: 94a42525f5804a5ed3f44dd3de4c03e2a199888844f6395432a41560d599b3a9e5190207430dddf8a8a88f1bc26b48873e5115b91876ba9bbf49386e11e074ba
7
+ data.tar.gz: bdb87791a1eb8b1f583f3d6ab426bf281acf8c673220ad4ea2ee74d7565fa363db8aa2fedf80e4634c97f21c70c7efefd36c4d8e934c4881961876c678159ed3
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ .vagrant
12
+ /vagrant_example/Gemfile.lock
13
+ /vagrant_example/.bundle/
14
+ /vagrant_example/vendor/
15
+ /vagrant_example/tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in capistrano-s3_archive.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,83 @@
1
+ # Capistrano::S3Archive
2
+
3
+ Capistrano::S3Archive is an extention of [Capistrano](http://www.capistranorb.com/) which enables to `set :scm, :s3_archive`.
4
+
5
+ This behaves like the [capistrano-rsync](https://github.com/moll/capistrano-rsync) except downloading sources from S3 instead of GIT by default.
6
+
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'capistrano-s3_archive', github: 'komazarari/capistrano-s3_archive'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ <!-- Or install it yourself as: -->
21
+
22
+ <!-- $ gem install capistrano-s3_archive -->
23
+
24
+ ## Usage
25
+
26
+ `set :scm, :s3_archive` in your config file.
27
+
28
+ Set a S3 path containing source archives to `repo_url`. For example, if you has following tree,
29
+
30
+ s3://yourbucket/somedirectory/
31
+ |- 201506011200.zip
32
+ |- 201506011500.zip
33
+ ...
34
+ |- 201506020100.zip
35
+ `- 201506030100.zip
36
+
37
+ then `set :repo_url, 's3://yourbucket/somedirectory'`.
38
+
39
+ Set parameters to access Amazon S3:
40
+
41
+ ```ruby
42
+ set :s3_client_options, { region: 'ap-northeast-1', credentials: somecredentials }
43
+ ```
44
+
45
+ And set regular capistrano options. To deploy staging:
46
+ ```
47
+ $ bundle exec cap staging deploy
48
+ ```
49
+
50
+ Or to skip download & extruct archive and deploy local files:
51
+ ```
52
+ $ bundle exec cap staging deploy_only
53
+ ```
54
+
55
+
56
+ ### Configuration
57
+ Set parameters with `set :key, value`.
58
+
59
+ #### Rsync Strategy (default)
60
+
61
+ Key | Default | Description
62
+ --------------|---------|------------
63
+ branch | `latest` | The S3 Object basename to download. Support `:latest` or such as `'201506011500.zip'`.
64
+ sort_proc | `->(a,b) { b.key <=> a.key }` | Sort algorithm used to detect `:latest` object basename. It should be proc object for `a,b` as `Aws::S3::Object` comparing.
65
+ rsync_options | `['-az']` | Options used to rsync.
66
+ local_cache | `tmp/deploy` | Path where to extruct your archive on local for staging and rsyncing. Can be both relative or absolute.
67
+ rsync_cache | `shared/deploy` | Path where to cache your repository on the server to avoid rsyncing from scratch each time. Can be both relative or absolute.<br> Set to `nil` if you want to disable the cache.
68
+ s3_archive | `tmp/archives` | Path where to download source archives. Can be both relative or absolute.
69
+
70
+
71
+ ## Development
72
+
73
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
74
+
75
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
76
+
77
+ ## Contributing
78
+
79
+ 1. Fork it ( https://github.com/[my-github-username]/capistrano-s3_archive/fork )
80
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
81
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
82
+ 4. Push to the branch (`git push origin my-new-feature`)
83
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/Vagrantfile ADDED
@@ -0,0 +1,21 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.configure(2) do |config|
5
+ config.vm.box = "ubuntu/trusty64"
6
+
7
+ config.vm.provision "shell", inline: <<-SHELL
8
+ if ! dpkg -l | grep ruby2.2 > /dev/null; then
9
+ apt-add-repository ppa:brightbox/ruby-ng
10
+ apt-get update
11
+ apt-get install ruby2.2 -y
12
+ fi
13
+ gem install bundler --no-ri --no-rdoc
14
+ cp /vagrant/vagrant_example/.insecure_private_key /home/vagrant/.ssh/insecure_key
15
+ chmod 400 /home/vagrant/.ssh/insecure_key
16
+ chown vagrant:vagrant /home/vagrant/.ssh/insecure_key
17
+ if ! grep "`ssh-keygen -y -f .ssh/insecure_key`" /home/vagrant/.ssh/authorized_keys ;then
18
+ ssh-keygen -y -f .ssh/insecure_key >> .ssh/authorized_keys
19
+ fi
20
+ SHELL
21
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "capistrano/s3_archive"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'capistrano/s3_archive/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "capistrano-s3_archive"
8
+ spec.version = Capistrano::S3Archive::VERSION
9
+ spec.authors = ["Takuto Komazaki"]
10
+ spec.email = ["komazarari@gmail.com"]
11
+
12
+ spec.summary = %q{Capistrano deployment from an archive on Amazon S3.}
13
+ spec.description = %q{Capistrano deployment from an archive on Amazon S3.}
14
+ spec.homepage = "https://github.com/komazarari/capistrano-s3_archive"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.required_ruby_version = '>= 2.0.0'
22
+ spec.add_dependency 'capistrano', '~> 3.0'
23
+ spec.add_dependency 'aws-sdk-core', '~> 2.0'
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.9"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ end
@@ -0,0 +1,5 @@
1
+ module Capistrano
2
+ module S3Archive
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,136 @@
1
+ load File.expand_path("../tasks/s3_archive.rake", __FILE__)
2
+
3
+ require "capistrano/s3_archive/version"
4
+ require 'capistrano/scm'
5
+ require 'aws-sdk-core'
6
+
7
+ set :rsync_options, ['-az']
8
+ set :rsync_copy, "rsync --archive --acls --xattrs"
9
+ set :rsync_cache, "shared/deploy"
10
+ set :local_cache, "tmp/deploy"
11
+ set :s3_archive, "tmp/archives"
12
+ set :sort_proc, ->(a,b) { b.key <=> a.key }
13
+
14
+ module Capistrano
15
+ module S3Archive
16
+ class SCM < Capistrano::SCM
17
+ include FileUtils
18
+ attr_accessor :bucket, :object_prefix
19
+
20
+ def initialize(*args)
21
+ super
22
+ @bucket, @object_prefix = parse_s3_uri(repo_url)
23
+ set :local_cache_dir, "#{fetch(:local_cache)}/#{fetch(:stage)}"
24
+ end
25
+
26
+ def get_object
27
+ s3_client.get_object(bucket: bucket, key: archive_object_key)
28
+ end
29
+
30
+ def list_objects(all_page = true)
31
+ response = s3_client.list_objects(bucket: bucket, prefix: object_prefix)
32
+ if all_page
33
+ response.inject([]) do |objects, page|
34
+ objects += page.contents
35
+ end
36
+ else
37
+ response
38
+ end
39
+ end
40
+
41
+ def archive_object_key
42
+ @archive_object_key ||=
43
+ case fetch(:branch)
44
+ when :master, :latest, nil
45
+ latest_object_key
46
+ else
47
+ [object_prefix, fetch(:branch)].join('/')
48
+ end
49
+ end
50
+
51
+ private
52
+ def s3_client
53
+ @s3_client ||= Aws::S3::Client.new(fetch(:s3_client_options))
54
+ end
55
+
56
+ def latest_object_key
57
+ list_objects.sort(&fetch(:sort_proc)).first.key
58
+ end
59
+
60
+ def parse_s3_uri(uri)
61
+ pathes = uri.split('://')[1].split('/')
62
+ [pathes.first, pathes.drop(1).join('/')]
63
+ end
64
+
65
+ ### Default strategy
66
+ private
67
+ module RsyncStrategy
68
+ def check
69
+ list_objects(false)
70
+ end
71
+
72
+ def stage
73
+ archive_file = File.join(fetch(:s3_archive), fetch(:stage).to_s, File.basename(archive_object_key))
74
+ if not File.exist?(archive_file)
75
+ mkdir_p(File.dirname(archive_file))
76
+ content = get_object.body.read
77
+ File.open(archive_file, 'w') do |f|
78
+ f.write(content)
79
+ end
80
+ else
81
+ context.info "#{archive_file} is found."
82
+ end
83
+
84
+ remove_entry_secure(fetch(:local_cache_dir)) if File.exist? fetch(:local_cache_dir)
85
+ mkdir_p(fetch(:local_cache_dir))
86
+ case archive_file
87
+ when /\.zip\Z/
88
+ dir = archive_file.gsub(/\.zip\Z/, '')
89
+ cmd = "unzip -q -d #{fetch(:local_cache_dir)} #{archive_file}"
90
+ when /\.tar\.gz\Z|\.tar\.bz2\Z/
91
+ dir = archive_file.gsub(/\.tar\.gz\Z|\.tar\.bz2\Z/, '')
92
+ cmd = "tar xf #{archive_file} -C #{fetch(:local_cache_dir)}"
93
+ end
94
+
95
+ run_locally do
96
+ execute cmd
97
+ end
98
+ end
99
+
100
+ def release(server = context.host)
101
+ user = server.user + '@' unless server.user.nil?
102
+ key = server.keys.first || Array(server.ssh_options[:keys]).first
103
+
104
+ rsync = ['rsync']
105
+ rsync.concat fetch(:rsync_options)
106
+ rsync << fetch(:local_cache_dir) + '/'
107
+ rsync << "-e 'ssh -i #{key}'"
108
+ rsync << "#{user}#{server.hostname}:#{rsync_cache || release_path}"
109
+
110
+ run_locally do
111
+ execute *rsync
112
+ end
113
+
114
+ unless fetch(:rsync_cache).nil?
115
+ cache = rsync_cache
116
+ on server do
117
+ copy = %(#{fetch(:rsync_copy)} "#{cache}/" "#{release_path}/")
118
+ execute copy
119
+ end
120
+ end
121
+ end
122
+
123
+ def current_revision
124
+ archive_object_key
125
+ end
126
+
127
+ private
128
+ def rsync_cache
129
+ cache = fetch(:rsync_cache)
130
+ cache = deploy_to + "/" + cache if cache && cache !~ /^\//
131
+ cache
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,44 @@
1
+ namespace :s3_archive do
2
+
3
+ def strategy
4
+ @strategy ||= Capistrano::S3Archive::SCM.new(self, fetch(:s3_archive_strategy, Capistrano::S3Archive::SCM::RsyncStrategy))
5
+ end
6
+
7
+ desc 'Check that the S3 buckets are reachable'
8
+ task :check do
9
+ on release_roles :all do
10
+ strategy.check
11
+ end
12
+ end
13
+
14
+ desc 'Extruct and stage the S3 archive in a stage directory'
15
+ task :stage do
16
+ if fetch(:skip_staging, false)
17
+ run_locally do
18
+ info "Skip extructing and staging."
19
+ end
20
+ else
21
+ on release_roles :all do
22
+ strategy.stage
23
+ end
24
+ end
25
+ end
26
+
27
+ desc 'Copy repo to releases'
28
+ task :create_release => :stage do
29
+ on release_roles :all do |server|
30
+ execute :mkdir, '-p', release_path
31
+ strategy.release(server)
32
+ end
33
+ end
34
+
35
+ desc 'Determine the revision that will be deployed'
36
+ task :set_current_revision do
37
+ set :current_revision, strategy.current_revision
38
+ end
39
+ end unless Rake::Task.task_defined?("s3_archive:check")
40
+
41
+ task :deploy_only do
42
+ set :skip_staging, true
43
+ invoke :deploy
44
+ end
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI
3
+ w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP
4
+ kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2
5
+ hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO
6
+ Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW
7
+ yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd
8
+ ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1
9
+ Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf
10
+ TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK
11
+ iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A
12
+ sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf
13
+ 4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP
14
+ cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk
15
+ EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN
16
+ CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX
17
+ 3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG
18
+ YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj
19
+ 3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+
20
+ dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz
21
+ 6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC
22
+ P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF
23
+ llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ
24
+ kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH
25
+ +vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ
26
+ NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,27 @@
1
+ # Load DSL and set up stages
2
+ require 'capistrano/setup'
3
+
4
+ # Include default deployment tasks
5
+ require 'capistrano/deploy'
6
+
7
+ # Include tasks from other gems included in your Gemfile
8
+ #
9
+ # For documentation on these, see for example:
10
+ #
11
+ # https://github.com/capistrano/rvm
12
+ # https://github.com/capistrano/rbenv
13
+ # https://github.com/capistrano/chruby
14
+ # https://github.com/capistrano/bundler
15
+ # https://github.com/capistrano/rails
16
+ # https://github.com/capistrano/passenger
17
+ #
18
+ # require 'capistrano/rvm'
19
+ # require 'capistrano/rbenv'
20
+ # require 'capistrano/chruby'
21
+ # require 'capistrano/bundler'
22
+ # require 'capistrano/rails/assets'
23
+ # require 'capistrano/rails/migrations'
24
+ # require 'capistrano/passenger'
25
+
26
+ # Load custom tasks from `lib/capistrano/tasks` if you have any defined
27
+ Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
@@ -0,0 +1,5 @@
1
+ # A sample Gemfile
2
+ source "https://rubygems.org"
3
+
4
+ gem "capistrano"
5
+ gem "capistrano-s3_archive", path: '/vagrant'
@@ -0,0 +1,7 @@
1
+ server 'localhost',
2
+ user: 'vagrant',
3
+ roles: ['web', 'app'],
4
+ ssh_options: {
5
+ auth_methods: ['publickey'],
6
+ keys: '/home/vagrant/.ssh/insecure_key'
7
+ }
@@ -0,0 +1,50 @@
1
+ # config valid only for current version of Capistrano
2
+ lock '3.4.0'
3
+
4
+ set :application, 'my_app_name'
5
+
6
+ set :repo_url, 's3://<YOUR_BUCKET>/<PREFIX>'
7
+ set :s3_client_options, { region: 'ap-northeast-1' } # and credentials, etc if needed
8
+
9
+ # Default branch is :master
10
+ # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
11
+
12
+ # Default deploy_to directory is /var/www/my_app_name
13
+ set :deploy_to, '/home/vagrant/my_app_name'
14
+
15
+ # Default value for :scm is :git
16
+ set :scm, :s3_archive
17
+
18
+ # Default value for :format is :pretty
19
+ # set :format, :pretty
20
+
21
+ # Default value for :log_level is :debug
22
+ # set :log_level, :debug
23
+
24
+ # Default value for :pty is false
25
+ # set :pty, true
26
+
27
+ # Default value for :linked_files is []
28
+ # set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml')
29
+
30
+ # Default value for linked_dirs is []
31
+ # set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')
32
+
33
+ # Default value for default_env is {}
34
+ # set :default_env, { path: "/opt/ruby/bin:$PATH" }
35
+
36
+ # Default value for keep_releases is 5
37
+ # set :keep_releases, 5
38
+
39
+ namespace :deploy do
40
+
41
+ after :restart, :clear_cache do
42
+ on roles(:web), in: :groups, limit: 3, wait: 10 do
43
+ # Here we can do anything such as:
44
+ # within release_path do
45
+ # execute :rake, 'cache:clear'
46
+ # end
47
+ end
48
+ end
49
+
50
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-s3_archive
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Takuto Komazaki
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capistrano
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk-core
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description: Capistrano deployment from an archive on Amazon S3.
70
+ email:
71
+ - komazarari@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - Gemfile
79
+ - README.md
80
+ - Rakefile
81
+ - Vagrantfile
82
+ - bin/console
83
+ - bin/setup
84
+ - capistrano-s3_archive.gemspec
85
+ - lib/capistrano/s3_archive.rb
86
+ - lib/capistrano/s3_archive/version.rb
87
+ - lib/capistrano/tasks/s3_archive.rake
88
+ - vagrant_example/.insecure_private_key
89
+ - vagrant_example/Capfile
90
+ - vagrant_example/Gemfile
91
+ - vagrant_example/config/deploy.rb
92
+ - vagrant_example/config/deploy/production.rb
93
+ homepage: https://github.com/komazarari/capistrano-s3_archive
94
+ licenses: []
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 2.0.0
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.2.2
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Capistrano deployment from an archive on Amazon S3.
116
+ test_files: []