dimkiriyenko-capone 0.15

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.
@@ -0,0 +1,24 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ *.gem
21
+ .bundle
22
+ pkg/*
23
+
24
+ ## PROJECT::SPECIFIC
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in capone.gemspec
4
+ gemspec
@@ -0,0 +1,29 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ capone (0.14)
5
+ capistrano (>= 2.5.0)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ capistrano (2.6.0)
11
+ highline
12
+ net-scp (>= 1.0.0)
13
+ net-sftp (>= 2.0.0)
14
+ net-ssh (>= 2.0.14)
15
+ net-ssh-gateway (>= 1.1.0)
16
+ highline (1.6.2)
17
+ net-scp (1.0.4)
18
+ net-ssh (>= 1.99.1)
19
+ net-sftp (2.0.5)
20
+ net-ssh (>= 2.0.9)
21
+ net-ssh (2.1.4)
22
+ net-ssh-gateway (1.1.0)
23
+ net-ssh (>= 1.99.1)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ capone!
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Denis Barushev
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,69 @@
1
+ # Capone
2
+
3
+ Capone is the set of Capistrano recipes that help me to deploy my
4
+ applications.
5
+
6
+ Capone by default uses Mongrel cluster (or Passenger) as an application
7
+ server, nginx as a web server, MySQL as a database server and git as a SCM.
8
+
9
+ The latest version of Capone was inspired by Rubaidh's
10
+ [Rubaidhstrano](http://github.com/rubaidh/rubaidhstrano) and some code has
11
+ been borrowed from its sources.
12
+
13
+ ## Installation
14
+
15
+ Capone could be installed either as a gem or as Rails plugin.
16
+
17
+ ### Gem (preferred)
18
+
19
+ For Rails 3 add to your `Gemfile`:
20
+
21
+ gem 'capone', :require => false, :version => '>= 0.1.0'
22
+
23
+ For Rails 2 add to the end of your `config/environments/development.rb` file:
24
+
25
+ config.gem 'capone', :lib => false, :version => '>= 0.1.0'
26
+
27
+ ### Rails plugin
28
+
29
+ ./script/plugin install git://github.com/denis/capone.git
30
+
31
+ ## Example usage
32
+
33
+ To start using Capone you just need to add `require "capone"` to your
34
+ `config/deploy.rb` file (only if Capone is installed as a gem) and set some
35
+ variables:
36
+
37
+ require "capone"
38
+
39
+ set :application, "set your application name here"
40
+ set :repository, "set your repository location here"
41
+ set :host, "set your host here"
42
+
43
+ # See capone/recipes/defaults.rb for defaults
44
+
45
+ ## Features
46
+
47
+ ### Whenever
48
+
49
+ Using [whenever](https://github.com/javan/whenever) is as easy as `set`ing `:whenever` to `true`. Just like this:
50
+
51
+ set :whenever, true
52
+
53
+ Whenever will use your application deploy path as crontab identifier.
54
+
55
+ You may wish to override the command, used to invoke whenever, e.g., to use Bundler:
56
+
57
+ set :whenever_command, 'bundle exec whenever'
58
+
59
+ Other features in process...
60
+
61
+ ## Thanks
62
+
63
+ - Jamis Buck for [Capistrano](http://github.com/jamis/capistrano),
64
+ - Rubaidh Ltd for their awesome
65
+ [Rubaidhstrano](http://github.com/rubaidh/rubaidhstrano).
66
+
67
+ ## Copyright
68
+
69
+ Copyright (c) 2009 Denis Barushev. See LICENSE for details.
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "capone/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "dimkiriyenko-capone"
7
+ s.version = Capone::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Denis Barushev", "Dmitriy Kiriyenko"]
10
+ s.email = ["barushev@gmail.com", "dmitriy.kiriyenko@gmail.com"]
11
+ s.homepage = "https://github.com/dmitriy-kiriyenko/capone"
12
+ s.summary = %q{Capone is the set of rake tasks and capistrano recipes.}
13
+ s.description = %q{Capone is the set of rake tasks and capistrano recipes.
14
+ Use it to avoid writing typical scenarios and maintaining them
15
+ in favour of configuring your builds and deploys declaratively.}
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ s.add_dependency "capistrano", ">= 2.5.0"
22
+ end
@@ -0,0 +1,9 @@
1
+ unless Capistrano::Configuration.respond_to?(:instance)
2
+ abort "Capone requires Capistrano 2"
3
+ end
4
+
5
+ Capistrano::Configuration.instance.load do
6
+ Dir["#{File.dirname(__FILE__)}/../recipes/*.rb"].each do |recipe|
7
+ load(recipe)
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Capone
2
+ VERSION = "0.15"
3
+ end
@@ -0,0 +1,6 @@
1
+ require "mongrel_cluster/recipes"
2
+
3
+ set :mongrel_conf, "#{deploy_to}/current/config/mongrel_cluster.yml"
4
+
5
+ depend :remote, :gem, "mongrel", ">=1.1.5"
6
+ depend :remote, :gem, "mongrel_cluster", ">=1.0.5"
@@ -0,0 +1,17 @@
1
+ namespace :deploy do
2
+ desc "Start application."
3
+ task :start, :roles => :app do
4
+ run "touch #{current_release}/tmp/restart.txt"
5
+ end
6
+
7
+ desc "Stop application."
8
+ task :stop, :roles => :app do
9
+ end
10
+
11
+ desc "Restart application."
12
+ task :restart, :roles => :app do
13
+ run "touch #{current_release}/tmp/restart.txt"
14
+ end
15
+ end
16
+
17
+ depend :remote, :gem, "passenger", ">=2.2.2"
@@ -0,0 +1,7 @@
1
+ on :load do
2
+ strategy = fetch(:daemon_strategy, :mongrel_cluster)
3
+
4
+ if [:passenger, :mongrel_cluster].include? strategy
5
+ load File.join(File.dirname(__FILE__), "daemon_strategies", "#{strategy}.rb")
6
+ end
7
+ end
@@ -0,0 +1,96 @@
1
+ namespace :capone do
2
+ namespace :db do
3
+ desc <<-DESC
4
+ Create MySQL user and database using data from config/database.yml.
5
+ DESC
6
+ task :setup, :roles => :db, :only => { :primary => true } do
7
+ config = YAML::load(File.open("config/database.yml"))[rails_env]
8
+ root_password = Capistrano::CLI.password_prompt(prompt="Enter a root password for MySQL: ")
9
+
10
+ run "mysql --user='root' --password='#{root_password}' -e \"CREATE DATABASE IF NOT EXISTS #{config["database"]} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON #{config["database"]}.* TO '#{config["username"]}'@'localhost' IDENTIFIED BY '#{config["password"]}' WITH GRANT OPTION;\""
11
+ end
12
+
13
+ desc <<-DESC
14
+ Load fixtures from db/fixtures to the database.
15
+ DESC
16
+ task :load_fixtures, :roles => :db, :only => { :primary => true } do
17
+ run "rake db:fixtures:load FIXTURES_PATH=db/fixtures RAILS_ENV=#{rails_env} -f #{release_path}/Rakefile"
18
+ end
19
+
20
+ desc <<-DESC
21
+ Dumps the database for the current environment into db/env-data.sql.bz2.
22
+ Any existing backup will be overwritten.
23
+ DESC
24
+ task :backup, :roles => :db, :only => { :primary => true } do
25
+ config = YAML::load(File.open("config/database.yml"))[rails_env]
26
+ case config["adapter"]
27
+ when "mysql"
28
+ cmd = ["mysqldump"]
29
+ cmd << "--host='#{config['host']}'" unless config["host"].nil?
30
+ cmd << "--user='#{config['username'].nil? ? 'root' : config['username']}'"
31
+ cmd << "--password='#{config['password']}'" unless config["password"].nil?
32
+ cmd << config["database"]
33
+ cmd << "| bzip2 > #{current_path}/db/#{rails_env}-data.sql.bz2"
34
+ run cmd.join(" ")
35
+ else
36
+ puts "Task not supported by '#{config['adapter']}'."
37
+ end
38
+ end
39
+
40
+ desc <<-DESC
41
+ Dump the database for the current environment and take a local copy.
42
+ DESC
43
+ task :download_backup, :roles => :db, :only => { :primary => true } do
44
+ backup
45
+ get "#{current_path}/db/#{rails_env}-data.sql.bz2", "db/#{rails_env}-data.sql.bz2"
46
+ end
47
+
48
+ desc <<-DESC
49
+ Load an existing database dump into the development environment's database.
50
+ DESC
51
+ task :load_backup do
52
+ run_locally "rake db:drop"
53
+ run_locally "rake db:create"
54
+
55
+ config = YAML::load(File.open("config/database.yml"))["development"]
56
+ case config["adapter"]
57
+ when "mysql"
58
+ cmd = ["bzcat db/#{rails_env}-data.sql.bz2 | mysql"]
59
+ cmd << "--host='#{config['host']}'" unless config["host"].nil?
60
+ cmd << "--user='#{config['username'].nil? ? 'root' : config['username']}'"
61
+ cmd << "--password='#{config['password']}'" unless config["password"].nil?
62
+ cmd << config["database"]
63
+ run_locally cmd.join(" ")
64
+ else
65
+ puts "Task not supported by '#{config['adapter']}'."
66
+ end
67
+ end
68
+
69
+ task :replicate do
70
+ download_backup
71
+ load_backup
72
+ end
73
+ end
74
+ end
75
+
76
+ on :load do
77
+ if fetch(:setup_database_after_deploy_setup, true)
78
+ after "deploy:setup", "capone:db:setup"
79
+ end
80
+ if fetch(:load_fixtures_to_database_after_deploy_cold, false)
81
+ after "deploy:cold", "capone:db:load_fixtures"
82
+ end
83
+
84
+ if fetch(:backup_database_before_migrations, false)
85
+ before "deploy:migrate", "capone:db:backup"
86
+ end
87
+
88
+ if fetch(:disable_web_during_migrations, false)
89
+ before "deploy:migrations", "deploy:web:disable"
90
+ after "deploy:migrations", "deploy:web:enable"
91
+ end
92
+ end
93
+
94
+ depend :remote, :command, "mysql"
95
+ depend :remote, :command, "mysqldump"
96
+ depend :remote, :command, "bzip2"
@@ -0,0 +1,33 @@
1
+ set :scm, :git
2
+ set :deploy_via, :remote_cache
3
+
4
+ set :rails_env, "production"
5
+
6
+ set(:deploy_to) { "/var/www/apps/#{application}" }
7
+
8
+ role(:app) { host }
9
+ role(:web) { host }
10
+ role(:db, :primary => true) { host }
11
+
12
+ set :use_sudo, false
13
+
14
+ # Needed for proper password prompts
15
+ default_run_options[:pty] = true
16
+
17
+ # SSH options
18
+ ssh_options[:forward_agent] = true
19
+
20
+ # You can redefine these variables in your config/deploy.rb
21
+
22
+ # set :daemon_strategy, :mongrel_cluster
23
+ # set :web_server, :nginx
24
+
25
+ # set :install_gems, true
26
+
27
+ # set :backup_database_before_migrations, false
28
+ # set :disable_web_during_migrations, false
29
+ # set :setup_database_after_deploy_setup, true
30
+ # set :load_fixtures_to_database_after_deploy_cold, false
31
+
32
+ # set :whenever, false
33
+ # set :delayed_job, false
@@ -0,0 +1,7 @@
1
+ on :load do
2
+ if fetch(:delayed_job, false)
3
+ after "deploy:stop", "delayed_job:stop"
4
+ after "deploy:start", "delayed_job:start"
5
+ after "deploy:restart", "delayed_job:restart"
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ namespace :capone do
2
+ namespace :gems do
3
+ desc <<-DESC
4
+ Install gems needed by application.
5
+ DESC
6
+ task :install, :roles => :app do
7
+ run "rake gems:install -f #{release_path}/Rakefile RAILS_ENV=#{rails_env}"
8
+ end
9
+
10
+ desc <<-DESC
11
+ Update installed gems.
12
+ DESC
13
+ task :update, :roles => :app do
14
+ sudo "gem update --no-rdoc --no-ri"
15
+ end
16
+ end
17
+ end
18
+
19
+ on :load do
20
+ if fetch(:install_gems, true)
21
+ after "deploy:update_code", "capone:gems:install"
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ namespace :capone do
2
+ namespace :nginx do
3
+ desc <<-DESC
4
+ Enable virtual host.
5
+ DESC
6
+ task :enable_vhost, :roles => :web do
7
+ sudo "ln -fs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}"
8
+ sudo "/etc/init.d/nginx reload"
9
+ end
10
+
11
+ desc <<-DESC
12
+ Disable virtual host.
13
+ DESC
14
+ task :disable_vhost, :roles => :web do
15
+ sudo "rm /etc/nginx/sites-enabled/#{application}"
16
+ sudo "/etc/init.d/nginx reload"
17
+ end
18
+
19
+ desc <<-DESC
20
+ Reload nginx configuration if the application nginx virtual host config file was changed.
21
+ DESC
22
+ task :reload_if_config_file_changed, :roles => :web do
23
+ run "bash -c \"if ! cmp #{previous_release}/config/nginx.conf #{current_path}/config/nginx.conf; then #{sudo} /etc/init.d/nginx reload; fi\""
24
+ end
25
+ end
26
+ end
27
+
28
+ on :load do
29
+ if fetch(:web_server, :nginx) == :nginx
30
+ before "deploy:start", "capone:nginx:enable_vhost"
31
+ after "deploy:stop", "capone:nginx:disable_vhost"
32
+ after "deploy:restart", "capone:nginx:reload_if_config_file_changed"
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ task :replicate do
2
+ capone.db.replicate
3
+ end
@@ -0,0 +1,17 @@
1
+ namespace :capone do
2
+ namespace :whenever do
3
+ desc <<-DESC
4
+ Update the crontab file with whenever.
5
+ DESC
6
+ task :update_crontab, :roles => :db do
7
+ whenever_command = fetch(:whenever_command, "whenever")
8
+ run "cd #{release_path} && #{whenever_command} --set environment=#{rails_env} --update-crontab #{deploy_to}"
9
+ end
10
+ end
11
+ end
12
+
13
+ on :load do
14
+ if fetch(:whenever, false)
15
+ after "deploy:symlink", "capone:whenever:update_crontab"
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dimkiriyenko-capone
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 15
9
+ version: "0.15"
10
+ platform: ruby
11
+ authors:
12
+ - Denis Barushev
13
+ - Dmitriy Kiriyenko
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-20 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: capistrano
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 27
30
+ segments:
31
+ - 2
32
+ - 5
33
+ - 0
34
+ version: 2.5.0
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ description: |-
38
+ Capone is the set of rake tasks and capistrano recipes.
39
+ Use it to avoid writing typical scenarios and maintaining them
40
+ in favour of configuring your builds and deploys declaratively.
41
+ email:
42
+ - barushev@gmail.com
43
+ - dmitriy.kiriyenko@gmail.com
44
+ executables: []
45
+
46
+ extensions: []
47
+
48
+ extra_rdoc_files: []
49
+
50
+ files:
51
+ - .gitignore
52
+ - Gemfile
53
+ - Gemfile.lock
54
+ - LICENSE
55
+ - README.md
56
+ - Rakefile
57
+ - capone.gemspec
58
+ - lib/capone.rb
59
+ - lib/capone/version.rb
60
+ - recipes/daemon_strategies/mongrel_cluster.rb
61
+ - recipes/daemon_strategies/passenger.rb
62
+ - recipes/daemon_strategy.rb
63
+ - recipes/db.rb
64
+ - recipes/defaults.rb
65
+ - recipes/delayed_job.rb
66
+ - recipes/gems.rb
67
+ - recipes/nginx.rb
68
+ - recipes/replicate.rb
69
+ - recipes/whenever.rb
70
+ has_rdoc: true
71
+ homepage: https://github.com/dmitriy-kiriyenko/capone
72
+ licenses: []
73
+
74
+ post_install_message:
75
+ rdoc_options: []
76
+
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ hash: 3
94
+ segments:
95
+ - 0
96
+ version: "0"
97
+ requirements: []
98
+
99
+ rubyforge_project:
100
+ rubygems_version: 1.5.2
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: Capone is the set of rake tasks and capistrano recipes.
104
+ test_files: []
105
+