capistrano-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,5 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ .yardoc
5
+ doc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in capistrano-lest.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,83 @@
1
+ Capistrano recipes
2
+ ==================
3
+
4
+ Deploy
5
+ ------
6
+
7
+ Git-based deployment process.
8
+
9
+ Minimal Capfile for deploy:
10
+
11
+ require 'capistrano-lest/deploy'
12
+
13
+ server 'server name or ip address', :web, :app, :db, :primary => true
14
+ set :user, 'user for deploy'
15
+ set :deploy_to, '/deploy/to/path'
16
+ set :repository, 'your git repository'
17
+
18
+ To setup:
19
+
20
+ !!!plain
21
+ cap deploy:setup
22
+
23
+ Then when you push some changes to git repository simply run:
24
+
25
+ !!!plain
26
+ cap deploy
27
+
28
+ If you have migrations instead of previous command run:
29
+
30
+ !!!plain
31
+ cap deploy:migrations
32
+
33
+ To look through changes to be deployed:
34
+
35
+ !!!plain
36
+ cap deploy:pending
37
+
38
+ Multistage
39
+ ----------
40
+
41
+ require 'capistrano-lest/multistage'
42
+
43
+ set :default_stage, :development
44
+
45
+ define_stage :development do
46
+ ...
47
+ end
48
+
49
+ define_stage :production do
50
+ ...
51
+ end
52
+
53
+ Bundle
54
+ ------
55
+
56
+ require 'capistrano-lest/bundle'
57
+
58
+ To automatically install missing gems:
59
+
60
+ after 'deploy:update_code', 'bundle:install'
61
+
62
+ Unicorn
63
+ -------
64
+
65
+ require 'capistrano-lest/unicorn'
66
+
67
+ Now you can setup to reload unicorn on `deploy:restart`:
68
+
69
+ after 'deploy:restart', 'unicorn:reload'
70
+
71
+ Whenever
72
+ --------
73
+
74
+ require 'capistrano-lest/whenever'
75
+
76
+ To automatically update crontab file:
77
+
78
+ after 'deploy:restart', 'whenever:update_crontab'
79
+
80
+ You can also clear crontab file with command:
81
+
82
+ !!!plain
83
+ cap whenever:clear_crontab
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,14 @@
1
+ # -*- encoding: utf-8 -*-
2
+ Gem::Specification.new do |s|
3
+ s.name = 'capistrano-deploy'
4
+ s.version = '0.0.1'
5
+ s.platform = Gem::Platform::RUBY
6
+ s.authors = ['Just Lest']
7
+ s.email = ['just.lest@gmail.com']
8
+ s.homepage = 'https://github.com/lest/capistrano-deploy'
9
+ s.summary = 'Capistrano deploy recipes'
10
+
11
+ s.files = `git ls-files`.split("\n")
12
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
13
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
14
+ end
@@ -0,0 +1,15 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :bundle do
3
+ desc 'Install gems'
4
+ task :install, :except => {:no_release => true} do
5
+ bundle_cmd = fetch(:bundle_cmd, 'bundle')
6
+ bundle_flags = fetch(:bundle_flags, '--deployment --quiet')
7
+ bundle_without = [*fetch(:bundle_without, [:development, :test])].compact
8
+
9
+ args = [bundle_flags.to_s]
10
+ args << "--without #{bundle_without.join(' ')}" unless bundle_without.empty?
11
+
12
+ run "cd #{deploy_to} && #{bundle_cmd} install #{args.join(' ')}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,59 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ ssh_options[:forward_agent] = true
3
+
4
+ set(:application) { repository.slice(/[^\/:]+?(?=\.git$)/) }
5
+ set(:repository) { abort "Please specify repository, set :repository, 'foo'" }
6
+ set(:deploy_to) { abort "Please specify deploy directory, set :deploy_to, '/deploy/to/path'" }
7
+
8
+ set :branch, 'master'
9
+
10
+ set(:current_revision) { capture("cd #{deploy_to} && git rev-parse HEAD").chomp }
11
+
12
+ namespace :deploy do
13
+ desc 'Deploy'
14
+ task :default do
15
+ update
16
+ restart
17
+ end
18
+
19
+ desc 'Deploy & migrate'
20
+ task :migrations do
21
+ update_code
22
+ migrate
23
+ restart
24
+ end
25
+
26
+ desc 'Setup'
27
+ task :setup, :except => {:no_release => true} do
28
+ run "mkdir -p `dirname #{deploy_to}` && git clone --no-checkout #{repository} #{deploy_to}"
29
+ update_code
30
+ end
31
+
32
+ desc 'Update'
33
+ task :update do
34
+ update_code
35
+ end
36
+
37
+ desc 'Update the deployed code'
38
+ task :update_code, :except => {:no_release => true} do
39
+ run "cd #{deploy_to} && git fetch origin && git reset --hard origin/#{branch}"
40
+ end
41
+
42
+ desc 'Run migrations'
43
+ task :migrate, :roles => :db, :only => {:primary => true} do
44
+ rake = fetch(:rake, 'rake')
45
+ rails_env = fetch(:rails_env, 'production')
46
+ run "cd #{deploy_to} && RAILS_ENV=#{rails_env} #{rake} db:migrate"
47
+ end
48
+
49
+ desc 'Restart'
50
+ task :restart do
51
+ # nothing
52
+ end
53
+
54
+ desc 'Show pending commits'
55
+ task :pending do
56
+ system("git log --pretty=medium --stat #{current_revision}..origin/#{branch}")
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,26 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ set :multistage_stages, []
3
+
4
+ def define_stage(name, &block)
5
+ multistage_stages << name
6
+ callbacks[:start].detect { |c| c.source == 'multistage:ensure' }.except << name.to_s
7
+ task(name) do
8
+ set :stage, name
9
+ block.call
10
+ end
11
+ end
12
+
13
+ namespace :multistage do
14
+ task :ensure do
15
+ unless exists?(:stage)
16
+ if exists?(:default_stage)
17
+ find_and_execute_task(default_stage)
18
+ else
19
+ abort "No stage specified. Please specify one of: #{multistage_stages.join(', ')} (e.g. `cap #{multistage_stages.first} #{ARGV.last}')"
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ on :start, 'multistage:ensure'
26
+ end
@@ -0,0 +1,15 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ set(:unicorn_pid) { "`cat #{deploy_to}/tmp/pids/unicorn.pid`" }
3
+
4
+ namespace :unicorn do
5
+ desc 'Reload unicorn'
6
+ task :reload, :roles => :app, :except => {:no_release => true} do
7
+ run "kill -HUP #{unicorn_pid}"
8
+ end
9
+
10
+ desc 'Stop unicorn'
11
+ task :stop, :roles => :app, :except => {:no_release => true} do
12
+ run "kill -QUIT #{unicorn_pid}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ set(:whenever_cmd) { 'whenever' }
3
+ set(:whenever_identifier) { application }
4
+
5
+ namespace :whenever do
6
+ desc 'Update crontab file'
7
+ task :update_crontab, :roles => :db, :only => {:primary => true} do
8
+ run "cd #{deploy_to} && #{whenever_cmd} --update-crontab #{whenever_identifier}"
9
+ end
10
+
11
+ desc 'Clear crontab file'
12
+ task :clear_crontab, :roles => :db, :only => {:primary => true} do
13
+ run "cd #{deploy_to} && #{whenever_cmd} --clear-crontab #{whenever_identifier}"
14
+ end
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-deploy
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Just Lest
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-02-11 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description:
23
+ email:
24
+ - just.lest@gmail.com
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - README.md
35
+ - Rakefile
36
+ - capistrano-deploy.gemspec
37
+ - lib/capistrano-deploy/bundle.rb
38
+ - lib/capistrano-deploy/deploy.rb
39
+ - lib/capistrano-deploy/multistage.rb
40
+ - lib/capistrano-deploy/unicorn.rb
41
+ - lib/capistrano-deploy/whenever.rb
42
+ has_rdoc: true
43
+ homepage: https://github.com/lest/capistrano-deploy
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ hash: 3
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.5.0
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: Capistrano deploy recipes
76
+ test_files: []
77
+