ms_deploy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ idea/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ms_deploy.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
data/TODO ADDED
@@ -0,0 +1,3 @@
1
+ # Todo
2
+
3
+ * implement onrollback
@@ -0,0 +1,26 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ # defaults
4
+ #set :bundle_gemfile, "Gemfile"
5
+ #set :bundle_dir, File.join(fetch(:shared_path), 'bundle')
6
+ #set :bundle_without, [:development, :test]
7
+ #set :bundle_roles, #{role_default} # e.g. [:app, :batch]
8
+
9
+ set :bundle_cmd, "/home/deploy/.rbenv/shims/bundle"
10
+ # http://shapeshed.com/journal/using-rbenv-to-manage-rubies/
11
+ # you can also apply a clever technique to allow you switch versions of ruby by pushing a new .rbenv-version file with capistrano. From version 1.1rc bundler allows you to specify a shebang for binstubs. To use this add the following to your capistrano recipe.
12
+ set :bundle_flags, "--deployment --quiet --binstubs --shebang ruby-local-exec"
13
+
14
+ require 'bundler/capistrano'
15
+
16
+ set :rake, 'bundle exec rake'
17
+
18
+ namespace :bundler do
19
+ task :install_gem do
20
+ run "cd #{current_path} && gem install bundler --pre --no-ri --no-rdoc"
21
+ end
22
+ end
23
+
24
+ before "bundle:install", "bundler:install_gem"
25
+
26
+ end
@@ -0,0 +1,12 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ namespace :deploy do
4
+ desc "Compile assets"
5
+ task :assets do
6
+ run "cd #{release_path}; RAILS_ENV=#{rails_env} #{rake} assets:precompile"
7
+ end
8
+ end
9
+
10
+ after 'deploy:symlink_dependencies', 'deploy:assets'
11
+
12
+ end
@@ -0,0 +1,49 @@
1
+ require "ms_deploy/render"
2
+
3
+ Capistrano::Configuration.instance.load do
4
+
5
+ namespace :deploy do
6
+ namespace :nginx do
7
+ desc <<-DESC
8
+ Starts the nginx web-server.
9
+ DESC
10
+ task :start do
11
+ #run "sudo god start nginx"
12
+ run "sudo /etc/init.d/nginx start"
13
+ end
14
+
15
+ desc <<-DESC
16
+ #Stops the nginx web-server.
17
+ DESC
18
+ task :stop do
19
+ #run "sudo god stop nginx"
20
+ run "sudo /etc/init.d/nginx stop"
21
+ end
22
+
23
+ desc <<-DESC
24
+ Restarts the nginx web-server.
25
+ DESC
26
+ task :restart do
27
+ #run "sudo god restart nginx"
28
+ run "sudo /etc/init.d/nginx restart"
29
+ end
30
+
31
+ task :install do
32
+ template_path = File.expand_path('../../templates/vhost.erb', __FILE__)
33
+ vars = {'application'=> application, 'project_root' => deploy_to + '/current', 'server_name' => server_name}
34
+ config_path = "#{shared_path}/config/#{application}_vhost.conf"
35
+
36
+ put(render_erb_template(template_path, vars), config_path)
37
+ sudo "rm -f /etc/nginx/sites-enabled/#{application}.conf"
38
+ sudo "ln -s #{config_path} /etc/nginx/sites-enabled/#{application}.conf"
39
+ end
40
+
41
+ task :uninstall do
42
+ sudo "rm -f /etc/nginx/sites-enabled/#{application}.conf"
43
+ end
44
+ end
45
+ end
46
+
47
+ after :"deploy:setup", :"deploy:nginx:install";
48
+
49
+ end
@@ -0,0 +1,39 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ rails_root = File.expand_path('../../../', __FILE__)
4
+
5
+ namespace :deploy do
6
+ namespace :prepare do
7
+ task :create_config do
8
+ config_file = "#{rails_root}/#{fetch(:configuration_file_prefix, 'config')}.#{fetch(:stage, 'production')}.yml"
9
+ raise "No '#{rails_root}/#{fetch(:configuration_file_prefix, 'config')}.#{fetch(:stage, 'production')}.yml' config file for '#{fetch(:stage, 'production')}'" unless File.exists? config_file
10
+
11
+ run "mkdir -p #{shared_path}/config/"
12
+ put(File.read(config_file), "#{shared_path}/config/#{fetch(:configuration_file_prefix, 'config')}.production.yml", :via => :scp)
13
+ end
14
+
15
+ task :create_database_config do
16
+ config_file = "#{rails_root}/database.#{fetch(:stage, 'production')}.yml"
17
+ raise "No '#{rails_root}/database.#{fetch(:configuration_file_prefix, 'config')}.#{fetch(:stage, 'production')}.yml' config file for '#{fetch(:stage, 'production')}'" unless File.exists? config_file
18
+
19
+ run "mkdir -p #{shared_path}/config/"
20
+ put(File.read(config_file), "#{shared_path}/config/database.yml", :via => :scp)
21
+ end
22
+
23
+ desc "Set up shared directory structure"
24
+ task :create_shared_folders do
25
+ shared_directories_to_create.each { |directory| run "mkdir -p #{directory}" }
26
+ end
27
+
28
+ #desc "Rebuilds css and js asset packages"
29
+ #task :rebuild_asset_cache, :roles => :app do
30
+ # run "cd #{current_path} && #{rake_path} RAILS_ENV=#{fetch(:rails_env, "production")} asset:packager:build_all" # If you’d like to prevent Capistrano from applying your Moonshine manifests for any reason:
31
+ #end
32
+ end
33
+ end
34
+
35
+ before :"deploy:setup", :"deploy:prepare:create_config";
36
+ before :"deploy:setup", :"deploy:prepare:create_database_config";
37
+ before :"deploy:setup", :"deploy:prepare:create_shared_folders";
38
+
39
+ end
@@ -0,0 +1,24 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ namespace :deploy do
4
+ desc <<-DESC
5
+ Symlink shared directories and files.
6
+ DESC
7
+ task :symlink_dependencies do
8
+ shared_directories_to_link = fetch(:shared_directories_to_link, [])
9
+ directories_to_create = fetch(:directories_to_create, [])
10
+ files_to_delete = fetch(:files_to_delete, [])
11
+ files_to_link = fetch(:files_to_link, {})
12
+ chmods_to_set = fetch(:chmods_to_set, [])
13
+
14
+ directories_to_create.each { |directory| run "mkdir -p #{directory}" }
15
+ shared_directories_to_link.each { |source, target| run "ln -s #{source} #{target}" }
16
+ files_to_delete.each { |file| run "rm #{file}" }
17
+ files_to_link.each { |source, target| run "ln -s #{source} #{target}"}
18
+ chmods_to_set.each { |target, chmod| run "chmod #{chmod} #{target}" }
19
+ end
20
+ end
21
+
22
+ after 'deploy:symlink', 'deploy:symlink_dependencies'
23
+
24
+ end
@@ -0,0 +1,23 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ set :unicorn_binary, "bundle exec unicorn"
4
+ set :unicorn_config, "#{current_path}/config/unicorn.production.rb"
5
+ set :unicorn_pid, "#{current_path}/tmp/pids/unicorn.pid"
6
+
7
+ namespace :deploy do
8
+ task :start, :roles => :app, :except => { :no_release => true } do
9
+ run "cd #{current_path} && #{try_sudo} #{unicorn_binary} -c #{unicorn_config} -E #{rails_env} -D"
10
+ end
11
+ task :stop, :roles => :app, :except => { :no_release => true } do
12
+ run "if [ -f #{unicorn_pid} ]; then #{try_sudo} kill `cat #{unicorn_pid}`; fi"
13
+ end
14
+ task :graceful_stop, :roles => :app, :except => { :no_release => true } do
15
+ run "#{try_sudo} kill -s QUIT `cat #{unicorn_pid}`"
16
+ end
17
+ task :restart, :roles => :app, :except => { :no_release => true } do
18
+ stop
19
+ start
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,38 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ namespace :info do
4
+ desc <<-DESC
5
+ Tail all or a single remote file
6
+
7
+ The logfile can be specified with a LOGFILE-environment variable.
8
+ It defaults to RAILS_ENV.log
9
+ DESC
10
+ task :tail, :roles => :app do
11
+ ENV["LOGFILE"] ||= "#{rails_env}.log"
12
+ begin
13
+ stream "tail -f #{shared_path}/log/#{ENV["LOGFILE"]}"
14
+ rescue Interrupt
15
+ puts "\n--interrupted by user--"
16
+ puts ""
17
+ end
18
+ end
19
+
20
+ desc "Display the currently deployed Application, Revision and Release"
21
+ task :version, :roles => :app, :except => { :no_release => true } do
22
+ rev = current_revision
23
+ rel = current_release.split('/').pop
24
+
25
+ puts ""
26
+ puts " AppName: #{fetch(:application)}"
27
+ puts " Version: #{rev}"
28
+ puts " Release: #{rel}"
29
+ puts ""
30
+ end
31
+
32
+ desc "Display the uname"
33
+ task :uname do
34
+ run "uname -a"
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,47 @@
1
+ require 'yaml'
2
+
3
+ Capistrano::Configuration.instance.load do
4
+
5
+ namespace :deploy do
6
+ namespace :prepare do
7
+ task :database do
8
+ set_unless :db_admin_user, 'root'
9
+ set_unless :db_admin_password, Capistrano::CLI.password_prompt("Type your mysql password for user #{db_admin_user}: ")
10
+ set_unless :db_name, application.to_s + '_' + rails_env.to_s
11
+ set_unless :db_password, database_config['password']
12
+
13
+ unless database_exits?
14
+ create_database
15
+ end
16
+ setup_database_permissions
17
+ end
18
+ end
19
+ end
20
+
21
+ def database_exits?
22
+ exists = false
23
+
24
+ run "mysql --user=#{db_admin_user} --password=#{db_admin_password} --execute=\"show databases;\"" do |channel, stream, data|
25
+ exists = exists || data.include?(db_name)
26
+ end
27
+
28
+ exists
29
+ end
30
+
31
+ def create_database
32
+ create_sql = <<-SQL
33
+ CREATE DATABASE #{db_name};
34
+ SQL
35
+
36
+ run "mysql --user=#{db_admin_user} --password=#{db_admin_password} --execute=\"#{create_sql}\""
37
+ end
38
+
39
+ def setup_database_permissions
40
+ grant_sql = <<-SQL
41
+ GRANT ALL PRIVILEGES ON #{db_name}.* TO #{application}@localhost IDENTIFIED BY '#{db_password}';
42
+ SQL
43
+
44
+ run "mysql --user=#{db_admin_user} --password=#{db_admin_password} --execute=\"#{grant_sql}\""
45
+ end
46
+
47
+ end
@@ -0,0 +1,41 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ namespace :redis do
4
+
5
+ desc "Install redis"
6
+ task :install do
7
+ ["#{sudo} rm -r /tmp/redis",
8
+ "#{sudo} rm /usr/local/bin/redis-*",
9
+ "git clone git://github.com/antirez/redis.git /tmp/redis",
10
+ "cd /tmp/redis && git pull",
11
+ "cd /tmp/redis && git checkout v2.0.4-stable",
12
+ "cd /tmp/redis && make clean",
13
+ "cd /tmp/redis && make",
14
+ "cd /tmp/redis && #{sudo} make install",
15
+ "#{sudo} cp /tmp/redis/redis.conf /etc/",
16
+ "#{sudo} sed -i 's/daemonize no/daemonize yes/' /etc/redis.conf",
17
+ "#{sudo} sed -i 's/# bind 127.0.0.1/bind 127.0.0.1/' /etc/redis.conf"
18
+ ].each {|cmd| run cmd}
19
+ end
20
+
21
+ desc "Start the Redis server"
22
+ task :start do
23
+ run "redis-server /etc/redis.conf"
24
+ end
25
+
26
+ desc "Stop the Redis server"
27
+ task :stop do
28
+ run 'echo "SHUTDOWN" | nc localhost 6379'
29
+ #sudo 'kill `cat /var/run/redis.pid`'
30
+ end
31
+
32
+ desc "Restart the Redis server"
33
+ task :restart do
34
+ redis.stop
35
+ sleep(1)
36
+ redis.start
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,85 @@
1
+
2
+ upstream <%= application %>_server {
3
+ # fail_timeout=0 means we always retry an upstream even if it failed
4
+ # to return a good HTTP response (in case the Unicorn master nukes a
5
+ # single worker for timing out).
6
+
7
+ # This is the socket we configured in unicorn.rb
8
+ server unix: <%= project_root %>/tmp/sockets/unicorn.sock fail_timeout=0;
9
+
10
+ # for TCP setups, point these to your backend servers
11
+ # server 127.0.0.1:8080 fail_timeout=0;
12
+ # server 192.168.0.8:8080 fail_timeout=0;
13
+ # server 192.168.0.9:8080 fail_timeout=0;
14
+ }
15
+
16
+ server {
17
+
18
+ listen 443;
19
+ server_name <%= server_name %>;
20
+
21
+ ssl on;
22
+ ssl_certificate /usr/local/nginx/conf/cert.pem;
23
+ ssl_certificate_key /usr/local/nginx/conf/cert.key;
24
+
25
+ client_max_body_size 4G;
26
+
27
+ # ~2 seconds is often enough for most folks to parse HTML/CSS and
28
+ # retrieve needed images/icons/frames, connections are cheap in
29
+ # nginx so increasing this is generally safe...
30
+ #keepalive_timeout 5;
31
+
32
+ # path for static files
33
+ root <%= project_root %>/public;
34
+
35
+ # Prefer to serve static files directly from nginx to avoid unnecessary
36
+ # data copies from the application server.
37
+ #
38
+ # try_files directive appeared in in nginx 0.7.27 and has stabilized
39
+ # over time. Older versions of nginx (e.g. 0.6.x) requires
40
+ # "if (!-f $request_filename)" which was less efficient:
41
+ # http://bogomips.org/unicorn.git/tree/examples/nginx.conf?id=v3.3.1#n127
42
+ try_files $uri/index.html $uri.html $uri @app;
43
+
44
+ location / {
45
+ # an HTTP header important enough to have its own Wikipedia entry:
46
+ # http://en.wikipedia.org/wiki/X-Forwarded-For
47
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
48
+
49
+ # enable this if and only if you use HTTPS, this helps Rack
50
+ # set the proper protocol for doing redirects:
51
+ # proxy_set_header X-Forwarded-Proto https;
52
+
53
+ # pass the Host: header from the client right along so redirects
54
+ # can be set properly within the Rack application
55
+ proxy_set_header Host $http_host;
56
+
57
+ # we don't want nginx trying to do something clever with
58
+ # redirects, we set the Host: header above already.
59
+ proxy_redirect off;
60
+
61
+ # set "proxy_buffering off" *only* for Rainbows! when doing
62
+ # Comet/long-poll/streaming. It's also safe to set if you're using
63
+ # only serving fast clients with Unicorn + nginx, but not slow
64
+ # clients. You normally want nginx to buffer responses to slow
65
+ # clients, even with Rails 3.1 streaming because otherwise a slow
66
+ # client can become a bottleneck of Unicorn.
67
+ #
68
+ # The Rack application may also set "X-Accel-Buffering (yes|no)"
69
+ # in the response headers do disable/enable buffering on a
70
+ # per-response basis.
71
+ # proxy_buffering off;
72
+
73
+ if (!-f $request_filename) {
74
+ proxy_pass http://app_server;
75
+ break;
76
+ }
77
+ }
78
+
79
+ # Rails error pages
80
+ error_page 500 502 503 504 /500.html;
81
+ location = /500.html {
82
+ root <%= project_root %>/public;
83
+ }
84
+ }
85
+
@@ -0,0 +1,81 @@
1
+
2
+ upstream <%= application %>_server {
3
+ # fail_timeout=0 means we always retry an upstream even if it failed
4
+ # to return a good HTTP response (in case the Unicorn master nukes a
5
+ # single worker for timing out).
6
+
7
+ # This is the socket we configured in unicorn.rb
8
+ server unix:/tmp/sockets/<%= application %>.sock fail_timeout=0;
9
+
10
+ # for TCP setups, point these to your backend servers
11
+ # server 127.0.0.1:8080 fail_timeout=0;
12
+ # server 192.168.0.8:8080 fail_timeout=0;
13
+ # server 192.168.0.9:8080 fail_timeout=0;
14
+ }
15
+
16
+ server {
17
+
18
+ listen 80;
19
+ server_name <%= server_name %>;
20
+
21
+ client_max_body_size 4G;
22
+
23
+ # ~2 seconds is often enough for most folks to parse HTML/CSS and
24
+ # retrieve needed images/icons/frames, connections are cheap in
25
+ # nginx so increasing this is generally safe...
26
+ #keepalive_timeout 5;
27
+
28
+ # path for static files
29
+ root <%= project_root %>/public;
30
+
31
+ # Prefer to serve static files directly from nginx to avoid unnecessary
32
+ # data copies from the application server.
33
+ #
34
+ # try_files directive appeared in in nginx 0.7.27 and has stabilized
35
+ # over time. Older versions of nginx (e.g. 0.6.x) requires
36
+ # "if (!-f $request_filename)" which was less efficient:
37
+ # http://bogomips.org/unicorn.git/tree/examples/nginx.conf?id=v3.3.1#n127
38
+ try_files $uri/index.html $uri.html $uri @app;
39
+
40
+ location / {
41
+ # an HTTP header important enough to have its own Wikipedia entry:
42
+ # http://en.wikipedia.org/wiki/X-Forwarded-For
43
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
44
+
45
+ # enable this if and only if you use HTTPS, this helps Rack
46
+ # set the proper protocol for doing redirects:
47
+ # proxy_set_header X-Forwarded-Proto https;
48
+
49
+ # pass the Host: header from the client right along so redirects
50
+ # can be set properly within the Rack application
51
+ proxy_set_header Host $http_host;
52
+
53
+ # we don't want nginx trying to do something clever with
54
+ # redirects, we set the Host: header above already.
55
+ proxy_redirect off;
56
+
57
+ # set "proxy_buffering off" *only* for Rainbows! when doing
58
+ # Comet/long-poll/streaming. It's also safe to set if you're using
59
+ # only serving fast clients with Unicorn + nginx, but not slow
60
+ # clients. You normally want nginx to buffer responses to slow
61
+ # clients, even with Rails 3.1 streaming because otherwise a slow
62
+ # client can become a bottleneck of Unicorn.
63
+ #
64
+ # The Rack application may also set "X-Accel-Buffering (yes|no)"
65
+ # in the response headers do disable/enable buffering on a
66
+ # per-response basis.
67
+ # proxy_buffering off;
68
+
69
+ if (!-f $request_filename) {
70
+ proxy_pass http://<%= application %>_server;
71
+ break;
72
+ }
73
+ }
74
+
75
+ # Rails error pages
76
+ error_page 500 502 503 504 /500.html;
77
+ location = /500.html {
78
+ root <%= project_root %>/public;
79
+ }
80
+ }
81
+
@@ -0,0 +1,8 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ #set :whenever_environment, defer { stage }
4
+ #set :whenever_identifier, defer { "#{application}_#{stage}" }
5
+ #set :whenever_command, "bundle exec whenever"
6
+ #require "whenever/capistrano"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'erubis'
2
+
3
+ def render_erb_template(template_path, vars={})
4
+ raise "file '#{template_path}' not exists" unless File.exist? template_path
5
+
6
+ template = File.open(template_path, 'r').read
7
+ Erubis::Eruby.new(template).result(vars)
8
+ end
@@ -0,0 +1,3 @@
1
+ module MsDeploy
2
+ VERSION = "0.0.1"
3
+ end
data/lib/ms_deploy.rb ADDED
@@ -0,0 +1 @@
1
+ require "ms_deploy/version"
data/ms_deploy.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/ms_deploy/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Michael Schiller"]
6
+ gem.email = ["michael.schiller@gmx.de"]
7
+ gem.description = %q{capistrano deployment task for my projects}
8
+ gem.summary = %q{capistrano deployment task for my projects}
9
+ gem.homepage = "https://github.com/mschiller/ms_deploy"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "ms_deploy"
15
+ gem.require_paths = ["lib"]
16
+
17
+ gem.add_dependency('erubis')
18
+
19
+ gem.version = MsDeploy::VERSION
20
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ms_deploy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Schiller
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: erubis
16
+ requirement: &76228310 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *76228310
25
+ description: capistrano deployment task for my projects
26
+ email:
27
+ - michael.schiller@gmx.de
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - Rakefile
35
+ - TODO
36
+ - lib/ms_deploy.rb
37
+ - lib/ms_deploy/recipes/bundler.rb
38
+ - lib/ms_deploy/recipes/deploy/assets.rb
39
+ - lib/ms_deploy/recipes/deploy/nginx.rb
40
+ - lib/ms_deploy/recipes/deploy/setup.rb
41
+ - lib/ms_deploy/recipes/deploy/symlink.rb
42
+ - lib/ms_deploy/recipes/deploy/unicorn.rb
43
+ - lib/ms_deploy/recipes/info.rb
44
+ - lib/ms_deploy/recipes/mysql.rb
45
+ - lib/ms_deploy/recipes/redis.rb
46
+ - lib/ms_deploy/recipes/templates/ssl_vhost.erb
47
+ - lib/ms_deploy/recipes/templates/vhost.erb
48
+ - lib/ms_deploy/recipes/whenever.rb
49
+ - lib/ms_deploy/render.rb
50
+ - lib/ms_deploy/version.rb
51
+ - ms_deploy.gemspec
52
+ homepage: https://github.com/mschiller/ms_deploy
53
+ licenses: []
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project:
72
+ rubygems_version: 1.8.11
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: capistrano deployment task for my projects
76
+ test_files: []
77
+ has_rdoc: