chicken_soup 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/README.md +128 -9
  2. data/lib/chicken_soup/capabilities/apache/apache-checks.rb +2 -0
  3. data/lib/chicken_soup/capabilities/apache/apache-defaults.rb +16 -12
  4. data/lib/chicken_soup/capabilities/bundler/bundler-checks.rb +2 -0
  5. data/lib/chicken_soup/capabilities/bundler/bundler-defaults.rb +2 -0
  6. data/lib/chicken_soup/capabilities/bundler/bundler-tasks.rb +12 -9
  7. data/lib/chicken_soup/capabilities/git/git-checks.rb +21 -0
  8. data/lib/chicken_soup/capabilities/git/git-defaults.rb +1 -2
  9. data/lib/chicken_soup/capabilities/github/github-defaults.rb +23 -0
  10. data/lib/chicken_soup/capabilities/github/github-tasks.rb +14 -0
  11. data/lib/chicken_soup/capabilities/heroku/heroku-checks.rb +2 -0
  12. data/lib/chicken_soup/capabilities/heroku/heroku-defaults.rb +2 -0
  13. data/lib/chicken_soup/capabilities/mysql/mysql-checks.rb +32 -0
  14. data/lib/chicken_soup/capabilities/nginx/nginx-checks.rb +2 -0
  15. data/lib/chicken_soup/capabilities/nginx/nginx-defaults.rb +12 -8
  16. data/lib/chicken_soup/capabilities/postgres/postgres-checks.rb +13 -0
  17. data/lib/chicken_soup/capabilities/rvm/rvm-checks.rb +7 -5
  18. data/lib/chicken_soup/capabilities/rvm/rvm-defaults.rb +7 -3
  19. data/lib/chicken_soup/capabilities/rvm/rvm-tasks.rb +8 -4
  20. data/lib/chicken_soup/capabilities/shared/db-checks.rb +2 -0
  21. data/lib/chicken_soup/capabilities/shared/db-defaults.rb +2 -0
  22. data/lib/chicken_soup/capabilities/shared/db-tasks.rb +17 -11
  23. data/lib/chicken_soup/capabilities/shared/web_server-tasks.rb +2 -0
  24. data/lib/chicken_soup/capabilities/svn/svn-defaults.rb +2 -0
  25. data/lib/chicken_soup/capabilities/unix/unix-checks.rb +2 -0
  26. data/lib/chicken_soup/capabilities/unix/unix-defaults.rb +2 -0
  27. data/lib/chicken_soup/capabilities/unix/unix-tasks.rb +5 -8
  28. data/lib/chicken_soup/capabilities.rb +4 -2
  29. data/lib/chicken_soup/deploy.rb +0 -1
  30. data/lib/chicken_soup/environment/checks.rb +2 -0
  31. data/lib/chicken_soup/environment/defaults.rb +5 -0
  32. data/lib/chicken_soup/global.rb +182 -121
  33. data/lib/chicken_soup/notifiers/airbrake/airbrake-tasks.rb +21 -0
  34. data/lib/chicken_soup/notifiers/email/email-checks.rb +2 -0
  35. data/lib/chicken_soup/notifiers/email/email-defaults.rb +2 -0
  36. data/lib/chicken_soup/notifiers/email/email-tasks.rb +19 -11
  37. data/lib/chicken_soup/notifiers/email/presenter.rb +3 -2
  38. data/lib/chicken_soup/notifiers/git/git-tasks.rb +3 -4
  39. data/lib/chicken_soup/notifiers.rb +2 -0
  40. data/lib/chicken_soup/version.rb +1 -1
  41. metadata +7 -3
  42. data/lib/chicken_soup/notifiers/hoptoad/hoptoad-tasks.rb +0 -6
data/README.md CHANGED
@@ -1,16 +1,136 @@
1
- Chicken Soup... for the Deployment Soul
2
- ================================
1
+ ![Chicken Soup... for the Deployer's Soul](http://www.thekompanee.com/public_files/chicken-soup.png)
3
2
 
4
- TODO
3
+ Even more opinionated than Capistrano itself, Chicken Soup adds a lot of useful tasks
4
+ specifically for those who want to DRY up deploying their Rails applications.
5
5
 
6
- Issues
7
- ------
6
+ Interface
7
+ ------------------------
8
+ Whether deploying to Heroku or your own servers, Chicken Soup gives you one command
9
+ interface to do it all.
10
+
11
+ Capabilities
12
+ ------------------------
13
+ Chicken Soup makes it easy to only use the functionality you need. Out of the box it
14
+ comes with:
15
+
16
+ * Heroku
17
+ * Unix Server
18
+ * Apache
19
+ * Nginx
20
+ * RVM
21
+ * Bundler
22
+ * Isolate (coming soon)
23
+ * Git
24
+ * Github
25
+ * Subversion (partial)
26
+ * Passenger
27
+ * Postgres
28
+ * MySQL
29
+
30
+ Notifiers
31
+ ------------------------
32
+ Executing items to notify upon a successful deployment is a breeze. Chicken Soup comes
33
+ loaded with:
34
+
35
+ * Email
36
+ * Git Tagging
37
+
38
+ Installation
39
+ ------------------------
40
+ gem install chicken_soup
41
+
42
+ or
43
+
44
+ gem chicken_soup, :require => false
45
+
46
+ in your Gemfile.
47
+
48
+ Run the included generator to create Rake tasks that Chicken Soup will need to do awesome stuff
49
+ on the server.
50
+
51
+ rails generate chicken_soup:add_ingredients
52
+
53
+ This will also modify your Capfile (or create it if you don't have one) and install a file in
54
+ `lib/recipes/` which will load Chicken Soup when you invoke Capistrano.
55
+
56
+ Finally, you'll get a deploy.rb template that will get you started with your Chicken Soup
57
+ experience.
58
+
59
+ Getting Started
60
+ ------------------------
61
+ Chicken Soup is all about sensible defaults. Any of which can be overridden in your deploy.rb
62
+ file.
63
+
64
+ Let's take a common example. You're deploying to your Unix server and you have your code
65
+ repository stored on Github. You use Bundler to handle all of your gem needs and RVM is installed
66
+ to manage your Ruby versions. Instead of remembering all kinds of random configurations such
67
+ as `default_run_options[:pty] = true` or where you need to include the Capistrano helpers for Bundler,
68
+ you can put this in your deploy.rb file:
69
+
70
+ set :application, 'myapplication'
71
+ set :capabilities, [:unix, :github, :bundler, :rvm]
72
+
73
+ set :deployment_type, :unix
74
+
75
+ And you can deploy with:
76
+
77
+ cap <staging|production> deploy
8
78
 
79
+ Want to add automatic Nginx integration? Just add :nginx to your capabilities list and your deployment
80
+ will do the right thing.
81
+
82
+ Wnat to migrate your application's DB automatically during deployment? Add :mysql or :postgres to your
83
+ capabilities list.
84
+
85
+ How Does This Work?
86
+ ------------------------
87
+ Well, that's what we mean by 'sensible defaults'. Using the above configuration, Chicken Soup will infer
88
+ certain things. For example, it will look in your gitconfig file for either a github username or a git
89
+ username. If either of these are found, it will assume your source code can be retrieved from:
90
+
91
+ git://github.com/your_username/myapplication
92
+
93
+ To figure out the server, it will assume you want to connect to:
94
+
95
+ staging.myapplication.com
96
+
97
+ for staging. And:
98
+
99
+ myapplication.com
100
+
101
+ for production.
102
+
103
+ Built-in Multistage Support
104
+ ------------------------
105
+ Yes it's required. It's what makes Chicken Soup 'opinionated'. In your deploy.rb file, you'll want
106
+ (if you want different settings in staging vs production) to create 2 tasks:
107
+
108
+ * :staging
109
+ * :production
110
+
111
+ Each of these tasks will contain 'siloed' variables that will only be set when deploying to that
112
+ environment.
113
+
114
+ __Note: Yes, we know about the Capistrano multi-stage extension but found it not extensible enough or useful
115
+ enough for us to reuse here. We attempted to keep to the same API in order to make it easy for people to
116
+ transition.__
117
+
118
+ What Isn't Chicken Soup?
119
+ ------------------------
120
+ Chicken Soup is __not__ a server management tool. It is used for easing deployment woes. In other words,
121
+ use it to `start`, `stop` and `restart` Nginx. Not to __install__ Nginx.
122
+
123
+ Making Your Own Chicken Soup
124
+ ------------------------
125
+ We attempted to develop Chicken Soup to be as easy as possible to add new notifiers and capabilities to your
126
+ deployments. Redis, MongoDB, Isolate, Mercurial, they're all fair game. So get Pull Requestin'!!
127
+
128
+ Issues
129
+ ------------------------
9
130
  If you have problems, please create a [Github issue](https://github.com/jfelchner/chicken_soup/issues).
10
131
 
11
132
  Credits
12
- -------
13
-
133
+ -------------------------
14
134
  ![thekompanee](http://www.thekompanee.com/public_files/kompanee-github-readme-logo.png)
15
135
 
16
136
  chicken_soup is maintained by [The Kompanee, Ltd.](http://www.thekompanee.com)
@@ -18,7 +138,6 @@ chicken_soup is maintained by [The Kompanee, Ltd.](http://www.thekompanee.com)
18
138
  The names and logos for The Kompanee are trademarks of The Kompanee, Ltd.
19
139
 
20
140
  License
21
- -------
22
-
141
+ -------------------------
23
142
  chicken_soup is Copyright &copy; 2011 The Kompanee. It is free software, and may be redistributed under the terms specified in the LICENSE file.
24
143
 
@@ -2,6 +2,8 @@
2
2
  # APACHE CHECKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :variable do
7
9
  namespace :check do
@@ -1,7 +1,23 @@
1
1
  ######################################################################
2
2
  # APACHE DEFAULTS #
3
3
  ######################################################################
4
+ module ChickenSoup
5
+ def find_web_server_control_script
6
+ if remote_file_exists?("/usr/sbin/apachectl")
7
+ set :web_server_control_script, "/usr/sbin/apachectl"
8
+ elsif remote_file_exists?("/usr/sbin/apache2")
9
+ set :web_server_control_script, "/usr/sbin/apache2"
10
+ elsif remote_file_exists?("/usr/sbin/httpd")
11
+ set :web_server_control_script, "/usr/sbin/httpd"
12
+ end
13
+
14
+ abort "Couldn't figure out how to control your installation of Apache" unless exists?(:web_server_control_script)
15
+ end
16
+ end
17
+
4
18
  Capistrano::Configuration.instance(:must_exist).load do
19
+ extend ChickenSoup
20
+
5
21
  namespace :capabilities do
6
22
  namespace :defaults do
7
23
  desc "[internal] Sets intelligent defaults for Apache deployments."
@@ -16,15 +32,3 @@ Capistrano::Configuration.instance(:must_exist).load do
16
32
  end
17
33
  end
18
34
  end
19
-
20
- def find_web_server_control_script
21
- if remote_file_exists?("/usr/sbin/apachectl")
22
- set :web_server_control_script, "/usr/sbin/apachectl"
23
- elsif remote_file_exists?("/usr/sbin/apache2")
24
- set :web_server_control_script, "/usr/sbin/apache2"
25
- elsif remote_file_exists?("/usr/sbin/httpd")
26
- set :web_server_control_script, "/usr/sbin/httpd"
27
- end
28
-
29
- abort "Couldn't figure out how to control your installation of Apache" unless exists?(:web_server_control_script)
30
- end
@@ -2,6 +2,8 @@
2
2
  # BUNDLER CHECKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :variable do
7
9
  namespace :check do
@@ -2,6 +2,8 @@
2
2
  # BUNDLER DEFAULTS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :defaults do
7
9
  desc "[internal] Sets intelligent defaults for Bundler deployments."
@@ -2,24 +2,31 @@
2
2
  # BUNDLER TASKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  before 'gems:install', 'bundler:install'
6
8
 
7
9
  run_task 'bundler:install', :as => manager_username
8
10
 
9
11
  namespace :gems do
10
- desc "Install Bundled Gems"
12
+ desc "Processes the file containing all of the gems that you want installed and installs them one-by-one."
11
13
  task :install, :roles => :app do
12
- run_with_rvm rvm_ruby_string, "bundle install --gemfile #{latest_release}/Gemfile --path #{gem_packager_gem_path} --deployment --without development test"
14
+ run_with_ruby_manager full_ruby_environment_string, "bundle install --gemfile #{latest_release}/Gemfile --path #{gem_packager_gem_path} --deployment --without development test"
13
15
  end
14
16
 
15
- desc "Update Bundled Gems"
17
+ desc <<-DESC
18
+ Checks for the newest version of each gem and installs it.
19
+
20
+ > Note: This can never be used in production. If you really wish to do this,
21
+ > you'll need to log into the server manually or use Capistrano's `console` task.
22
+ DESC
16
23
  task :update, :roles => :app do
17
24
  abort "I'm sorry Dave, but I can't let you do that. I have full control over production." if rails_env == 'production'
18
25
 
19
26
  run "cd #{latest_release} && bundle update"
20
27
  end
21
28
 
22
- desc "Remove Bundled Gems"
29
+ desc "Removes all of the gems currently installed."
23
30
  task :clean, :roles => :app do
24
31
  run "rm -rf #{gem_packager_gem_path}/*"
25
32
  end
@@ -30,11 +37,7 @@ Capistrano::Configuration.instance(:must_exist).load do
30
37
  task :install, :roles => :app do
31
38
  bundler_install_command = "gem install bundler --version #{gem_packager_version} --no-ri --no-rdoc && gem cleanup bundler"
32
39
 
33
- if fetch(:capabilities).include? :rvm
34
- run_with_rvm "#{ruby_version}@global", bundler_install_command
35
- else
36
- run bundler_install_command
37
- end
40
+ run_with_ruby_manager "#{ruby_version}@global", bundler_install_command
38
41
  end
39
42
  end
40
43
  end
@@ -0,0 +1,21 @@
1
+ ######################################################################
2
+ # GIT CHECKS #
3
+ ######################################################################
4
+ Capistrano::Configuration.instance(:must_exist).load do
5
+ namespace :capabilities do
6
+ namespace :variable do
7
+ namespace :check do
8
+ desc <<-DESC
9
+ [internal] Checks to see if all necessary Git variables have been set up.
10
+ DESC
11
+ task :rvm do
12
+ required_variables = [
13
+ :repository
14
+ ]
15
+
16
+ verify_variables(required_variables)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -6,13 +6,12 @@ Capistrano::Configuration.instance(:must_exist).load do
6
6
  namespace :defaults do
7
7
  desc "[internal] Sets intelligent version control defaults for deployments"
8
8
  task :git do
9
- _cset :github_account, ENV["USER"]
10
9
  _cset :deploy_via, :remote_cache
11
10
 
12
11
  set :scm, :git
13
- set(:repository) { "git@github.com:#{github_account}/#{application}.git" }
14
12
  set(:branch) { `git branch`.match(/\* (\S+)\s/m)[1] || raise("Couldn't determine current branch") }
15
13
  set(:remote) { `git remote`.match(/(\S+)\s/m)[1] || raise("Couldn't determine default remote repository") }
14
+
16
15
  ssh_options[:forward_agent] = true
17
16
  end
18
17
  end
@@ -0,0 +1,23 @@
1
+ ######################################################################
2
+ # GITHUB DEFAULTS #
3
+ ######################################################################
4
+ require 'chicken_soup/capabilities/git/git-defaults'
5
+
6
+ Capistrano::Configuration.instance(:must_exist).load do
7
+ before 'capabilities:defaults:github', 'capabilities:defaults:git'
8
+
9
+ namespace :capabilities do
10
+ namespace :defaults do
11
+ desc "[internal] Sets defaults for deployments from Github"
12
+ task :github do
13
+ gitconfig_github_user = `git config --get github.user`.chomp
14
+
15
+ _cset :github_account, gitconfig_github_user != '' ? gitconfig_github_user : local_user
16
+ _cset :github_repository, application
17
+
18
+ set :github_url, "https://github.com/#{github_account}/#{github_repository}"
19
+ set(:repository) { "git@github.com:#{github_account}/#{github_repository}.git" }
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ ######################################################################
2
+ # GITHUB TASKS #
3
+ ######################################################################
4
+ Capistrano::Configuration.instance(:must_exist).load do
5
+ namespace :git do
6
+ desc <<-DESC
7
+ Opens the default browser so that you can view the commit that
8
+ is currently on the specified environment.
9
+ DESC
10
+ task :browse do
11
+ `open #{github_url}/tree/#{current_revision}`
12
+ end
13
+ end
14
+ end
@@ -2,6 +2,8 @@
2
2
  # HEROKU CHECKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :variable do
7
9
  namespace :check do
@@ -2,6 +2,8 @@
2
2
  # HEROKU DEFAULTS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :defaults do
7
9
  desc "[internal] Sets intelligent defaults for Heroku deployments"
@@ -0,0 +1,32 @@
1
+ ######################################################################
2
+ # MYSQL CHECKS #
3
+ ######################################################################
4
+ Capistrano::Configuration.instance(:must_exist).load do
5
+ require 'chicken_soup/capabilities/shared/db-checks'
6
+
7
+ namespace :capabilities do
8
+ namespace :variable do
9
+ namespace :check do
10
+ desc <<-DESC
11
+ [internal] Checks to see if all necessary MySQL capabilities variables have been set up.
12
+ DESC
13
+ task :mysql do
14
+ capabilities.variable.check.db
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ namespace :capabilities do
21
+ namespace :deployment do
22
+ namespace :check do
23
+ desc <<-DESC
24
+ [internal] Checks to see MySQL is ready for deployment.
25
+ DESC
26
+ task :mysql do
27
+ capabilities.deployment.check.db
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -2,6 +2,8 @@
2
2
  # NGINX CHECKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :variable do
7
9
  namespace :check do
@@ -1,7 +1,19 @@
1
1
  ######################################################################
2
2
  # NGINX DEFAULTS #
3
3
  ######################################################################
4
+ module ChickenSoup
5
+ def find_web_server_control_script
6
+ if remote_file_exists?("/etc/init.d/nginx")
7
+ set :web_server_control_script, "/etc/init.d/nginx"
8
+ end
9
+
10
+ abort "Couldn't figure out how to control your installation of Nginx" unless exists?(:web_server_control_script)
11
+ end
12
+ end
13
+
4
14
  Capistrano::Configuration.instance(:must_exist).load do
15
+ extend ChickenSoup
16
+
5
17
  namespace :capabilities do
6
18
  namespace :defaults do
7
19
  desc "[internal] Checks to see what type of Nginx installation is running on the remote."
@@ -11,11 +23,3 @@ Capistrano::Configuration.instance(:must_exist).load do
11
23
  end
12
24
  end
13
25
  end
14
-
15
- def find_web_server_control_script
16
- if remote_file_exists?("/etc/init.d/nginx")
17
- set :web_server_control_script, "/etc/init.d/nginx"
18
- end
19
-
20
- abort "Couldn't figure out how to control your installation of Nginx" unless exists?(:web_server_control_script)
21
- end
@@ -16,4 +16,17 @@ Capistrano::Configuration.instance(:must_exist).load do
16
16
  end
17
17
  end
18
18
  end
19
+
20
+ namespace :capabilities do
21
+ namespace :deployment do
22
+ namespace :check do
23
+ desc <<-DESC
24
+ [internal] Checks to see Postgres is ready for deployment.
25
+ DESC
26
+ task :postgres do
27
+ capabilities.deployment.check.db
28
+ end
29
+ end
30
+ end
31
+ end
19
32
  end
@@ -2,6 +2,8 @@
2
2
  # RVM CHECKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :variable do
7
9
  namespace :check do
@@ -12,8 +14,8 @@ Capistrano::Configuration.instance(:must_exist).load do
12
14
  required_variables = [
13
15
  :rvmrc_file,
14
16
  :ruby_version,
15
- :rvm_gemset,
16
- :rvm_ruby_string,
17
+ :ruby_gemset,
18
+ :full_ruby_environment_string,
17
19
  ]
18
20
 
19
21
  verify_variables(required_variables)
@@ -26,11 +28,11 @@ Capistrano::Configuration.instance(:must_exist).load do
26
28
  task :rvm do
27
29
  abort "Could not find an .rvmrc file at #{rvmrc_file}. To use the RVM capability, you must have a valid local .rvmrc file." unless File.exist?(rvmrc_file)
28
30
 
29
- rvmrc_file_contents = capture("cat #{current_path}/.rvmrc", :roles => :app)
30
- set :current_rvm_ruby_string, rvmrc_file_contents.match(ChickenSoup::RVM_INFO_FORMAT)[1]
31
+ rvmrc_file_contents = capture("cat #{current_path}/.rvmrc", :roles => :app)
32
+ set :current_ruby_environment_string, rvmrc_file_contents.match(ChickenSoup::RVM_INFO_FORMAT)[1]
31
33
 
32
34
  unless ruby_version_update_pending
33
- abort "'#{rvm_ruby_string}' does not match the version currently installed on the server (#{current_rvm_ruby_string}). Please run 'cap <environment> ruby:update deploy:subzero' if you would like to upgrade your Ruby version prior to deploying." unless current_rvm_ruby_string == rvm_ruby_string
35
+ abort "'#{full_ruby_environment_string}' does not match the version currently installed on the server (#{current_ruby_environment_string}). Please run 'cap <environment> ruby:update deploy:subzero' if you would like to upgrade your Ruby version prior to deploying." unless current_ruby_environment_string == full_ruby_environment_string
34
36
  end
35
37
  end
36
38
  end
@@ -1,9 +1,13 @@
1
1
  ######################################################################
2
2
  # RVM DEFAULTS #
3
3
  ######################################################################
4
- ::ChickenSoup::RVM_INFO_FORMAT = /^rvm.+\s(([a-zA-Z0-9\-\._]+)(?:@([a-zA-Z0-9\-\._]+))?)/
4
+ module ChickenSoup
5
+ RVM_INFO_FORMAT = /^rvm.+\s(([a-zA-Z0-9\-\._]+)(?:@([a-zA-Z0-9\-\._]+))?)/
6
+ end
5
7
 
6
8
  Capistrano::Configuration.instance(:must_exist).load do
9
+ extend ChickenSoup
10
+
7
11
  namespace :capabilities do
8
12
  namespace :defaults do
9
13
  _cset :rvmrc_file, File.join(rails_root, '.rvmrc')
@@ -14,12 +18,12 @@ Capistrano::Configuration.instance(:must_exist).load do
14
18
  contents.match(ChickenSoup::RVM_INFO_FORMAT)[2]
15
19
  end
16
20
 
17
- _cset(:rvm_gemset) do
21
+ _cset(:ruby_gemset) do
18
22
  contents = File.read(rvmrc_file)
19
23
  contents.match(ChickenSoup::RVM_INFO_FORMAT)[3]
20
24
  end
21
25
 
22
- _cset(:rvm_ruby_string) {rvm_gemset ? "#{ruby_version}@#{rvm_gemset}" : ruby_version}
26
+ _cset(:full_ruby_environment_string) {ruby_gemset ? "#{ruby_version}@#{ruby_gemset}" : ruby_version}
23
27
  end
24
28
  end
25
29
  end
@@ -1,11 +1,15 @@
1
1
  ######################################################################
2
2
  # RVM TASKS #
3
3
  ######################################################################
4
- def run_with_rvm(ruby_env_string, command)
5
- run("rvm use #{ruby_env_string} && #{command}")
4
+ module ChickenSoup
5
+ def run_with_ruby_manager(ruby_env_string, command, options = {})
6
+ run "rvm use #{ruby_env_string} && #{command}", options
7
+ end
6
8
  end
7
9
 
8
10
  Capistrano::Configuration.instance(:must_exist).load do
11
+ extend ChickenSoup
12
+
9
13
  run_task 'ruby:update', :as => manager_username
10
14
 
11
15
  namespace :ruby do
@@ -23,8 +27,8 @@ Capistrano::Configuration.instance(:must_exist).load do
23
27
 
24
28
  set :ruby_version_update_pending, false
25
29
 
26
- run("rvm use --create #{rvm_ruby_string}")
27
- run("rvm wrapper #{rvm_ruby_string} #{application_server_type}")
30
+ run("rvm use --create #{full_ruby_environment_string}")
31
+ run("rvm wrapper #{full_ruby_environment_string} #{application_server_type}")
28
32
  else
29
33
  set :ruby_version_update_pending, true
30
34
  end
@@ -2,6 +2,8 @@
2
2
  # DB CHECKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :variable do
7
9
  namespace :check do
@@ -2,6 +2,8 @@
2
2
  # DB DEFAULTS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :defaults do
7
9
  desc "[internal] Sets intelligent defaults for DB deployments."
@@ -2,12 +2,15 @@
2
2
  # COMMON DB TASKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  _cset(:db_root_password) {Capistrano::CLI.password_prompt("Root Password For DB: ")}
6
8
  _cset(:db_app_password) {Capistrano::CLI.password_prompt("App Password For DB: ")}
7
9
 
8
10
  run_task "db:create", :as => manager_username
9
11
  run_task "db:drop", :as => manager_username
10
12
 
13
+ before "deploy:cleanup", "deploy:migrate"
11
14
  before "deploy:migrate", "db:backup" unless skip_backup_before_migration
12
15
 
13
16
  namespace :db do
@@ -25,23 +28,26 @@ Capistrano::Configuration.instance(:must_exist).load do
25
28
  end
26
29
  end
27
30
 
28
- desc <<-DESC
29
- Creates an easy way to debug remote data locally.
30
-
31
- * Running this task will create a dump file of all the data in the specified
32
- environment.
33
- * Copy the dump file to the local machine
34
- * Drop and recreate all local databases
35
- * Import the dump file
36
- * Bring the local DB up-to-date with any local migrations
37
- * Prepare the test environment
38
- DESC
39
31
  namespace :pull do
32
+ desc <<-DESC
33
+ Creates an easy way to debug remote data locally.
34
+
35
+ * Running this task will create a dump file of all the data in the specified
36
+ environment.
37
+ * Copy the dump file to the local machine
38
+ * Drop and recreate all local databases
39
+ * Import the dump file
40
+ * Bring the local DB up-to-date with any local migrations
41
+ * Prepare the test environment
42
+ DESC
40
43
  task :default, :roles => :db, :only => {:primary => true} do
41
44
  db.backup.default
42
45
  db.pull.latest
43
46
  end
44
47
 
48
+ desc <<-DESC
49
+ Just like `db:pull` but doesn't create a new backup first.
50
+ DESC
45
51
  task :latest, :roles => :db, :only => {:primary => true} do
46
52
  latest_backup = capture(%Q{ls #{db_backups_path} -xtC | head -n 1 | cut -d " " -f 1}).chomp
47
53
 
@@ -2,6 +2,8 @@
2
2
  # COMMON WEB SERVER TASKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  run_task 'web_server:stop', :as => manager_username
6
8
  run_task 'web_server:start', :as => manager_username
7
9
  run_task 'web_server:restart', :as => manager_username
@@ -2,6 +2,8 @@
2
2
  # SUBVERSION DEFAULTS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :defaults do
7
9
  desc "[internal] Sets intelligent version control defaults for deployments"
@@ -2,6 +2,8 @@
2
2
  # UNIX CHECKS #
3
3
  ######################################################################
4
4
  Capistrano::Configuration.instance(:must_exist).load do
5
+ extend ChickenSoup
6
+
5
7
  namespace :capabilities do
6
8
  namespace :variable do
7
9
  namespace :check do