--- capistrano version 1 Sun Oct 01 08:44:19 +0000 2006
+++ capistrano version 9 Tue Dec 02 22:08:37 +0000 2008
@@ -1,204 +1,226 @@
http://www.dizzy.co.uk/cheatsheets
This work is licensed under the Creative Commons
Attribution-NonCommercial-NoDerivs 2.0 License. To
view a copy of this license, visit
http://creativecommons.org/licenses/by-nc-nd/2.0/uk
########## Shell Commands ##########
Installation:
$ gem install capistrano
-Add your application to Capistrano (capistranize):
-$ cap --apply-to /path/to/your/app YourApplicationName
+Add your application to Capistrano (capify):
+$ capify .
+# NOTE: Rake access to capistrano is deprecated in Capistrano 1.3.
+# Use the 'cap' command instead.
+
Execute the setup task:
-$ rake remote:exec ACTION=setup
+$ cap deploy:setup
-Execute the cold_deploy task:
-$ rake remote:exec ACTION=cold_deploy
-
Deploy your application:
-$ rake deploy
+$ cap deploy
+Similar to deploy, but it runs the migrate task on the new release before
+updating the symlink:
+$ rake remote:deploy_with_migrations
+
Rollback a release from production:
$ rake rollback
Execute the disable_web task:
$ rake remote_exec ACTION=disable_web \
UNTIL="tomorrow morning" \
REASON="vital upgrade"
Using the invoke task:
$ rake remote_exec ACTION=invoke \
COMMAND="svn up /u/apps/flipper/current/app/views" \
ROLES=app
########## Standard Tasks ##########
cleans up the releases directory, leaving the five most recent releases:
$ cap cleanup
used when deploying an application for the first time. Starts the
application’s
spinner (via the spinner task) and then does a normal deploy:
$ cap cold_deploy
updates all the code on your server (via update_code and symlink
tasks), then restarts the FastCGI listeners on the application servers (via
the restart task):
$ cap deploy
prints the difference between what was last deployed, and what is
currently in your repository:
$ cap diff_from_last_deploy
puts up a static maintenance page that is displayed to visitors:
$ cap disable_web
removes the maintenance page:
$ cap enable_web
allows you to send commands directly:
$ cap invoke
changes to the directory of your current release (as indicated by the
current symlink), and runs rake RAILS_ENV=production migrate:
$ cap migrate
restarts all FastCGI listeners for your application by calling the reaper
command without arguments. Only executed on :app servers
$ cap restart
rolls your application back to the previously deployed version
determines the previous release , updates the current symlink to point
to that, and then deletes the latest release
$ cap rollback
Creates and chmods the directory tree properly:
$ cap setup
inspect the existing tasks and display them to standard out in
alphabetical order, along with their descriptions:
$ cap show_tasks
starts the spinner process for your application:
$ cap spinner
updates the current symlink to the latest deployed version of the code
$ cap symlink
Checks out your source code, deletes the log and public/system
directories in your new release, symlinks log to
#{shared_path}/log, symlinks public/system to #{shared_path}/system:
$ cap update_code
########## config/deploy.rb ##########
*Defining Tasks
task :hello_world do
run "echo Hello, $HOSTNAME"
end
task :hello_world, :roles => [:db, :app] do
puts "calling hello_world..."
hello_world
end
*Transactions
task :cold_deploy do
transaction do
task_one_here
task_two_here
end
task_three_not_in_transaction
end
*Capturing output with run
run "sudo ls -la" do |channel, stream, data|
if data =~ /^Password:/
logger.info "#{channel[:host]} asked for password"
channel.send_data "mypass\n"
end
end
buffer = render(:template =>
<<EXAMPLE_TEMPLATE)
This template will be rendered replacing variables
<%= like_this_variable =>
with their values.
EXAMPLE_TEMPLATE
put buffer, "path/to/save/file.txt", :mode => 0755
-*deploy.rb variables
-set via -> set :application, "flipper"
+* multi-stage
+set :stages, %w(staging production testing) # [optional] defaults to
+[development, test, staging?, production].
+set :default_stage, "testing" # [optional] if omitted, cap aborts if you don't
+specify in args
+require 'capistrano/ext/multistage'
-(variable) (default) (description)
-:application required The name of your application.
+Stage-specific code in config/deploy/staging.rb and config/deploy/production.rb.
+see: http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage
-:repository required The location of your code’s scm repository
+*deploy.rb variables and their defaults
-:gateway nil The address of the server to use as a gateway.
+The name of your application.
+:application (required)
-:user current_user The name of the user to use when logging into the remote
-host(s)
+The location of your code’s scm repository
+:repository (required)
-:password password The password to use for logging into the remote host(s).
+The address of the server to use as a gateway.
+:gateway nil
-:deploy_to The root of the directory tree on the remote host(s) that the
-application should
- be deployed to
+The name of the user to use when logging into the remote host(s).
+:user current_user
-:version_dir releases The directory under deploy_to that should contain each
-deployed revision
+The password to use for logging into the remote host(s).
+:password password
-:current_dir current The name to use (relative to deploy_to) for the symlink
-that points at the
- current release
+The root of the directory tree on the remote host(s) that the
+application should be deployed to
+:deploy_to “/u/apps/#{application}”
-:shared_dir shared The name of the directory under deploy_to that will contain
-directories and files to be shared between all releases
+The directory under deploy_to that should contain each deployed revision.
+:version_dir releases
-:revision (latest) This specifies the revision you want to check out on the
-remote machines
+The name to use (relative to deploy_to) for the symlink that points at
+the current release
+:current_dir current
-:scm subversion The source control module to use. Current supported are
-:subversion, :cvs, :darcs
+The name of the directory under deploy_to that will contain directories and
+files to be shared between all releases.
+:shared_dir shared
-:svn,:cvs,:darcs The location on the remote host of the source control
-executable
+This specifies the revision you want to check out on the remote machines.
+:revision (latest)
-:checkout co The subversion operation to use when checking out code on the
-remote host.
- Can be set to “export”
+The source control module to use.
+Current supported are :subversion, :cvs, :darcs
+:scm subversion
-:ssh_options Hash.new Hash of additional options passed to the SSH connection
-routine.
- This lets you set (among other things) a non-standard port to connect on:
- (ssh_options[:port] = 2345)
+The location on the remote host of the source control executable.
+:svn,:cvs,:darcs
-:use_sudo true Whether or not tasks that can use sudo, ought to use sudo. In a
-shared environment,
- this is typically not desirable (or possible), and in that case you should
- set this variable to false
+The subversion operation to use when checking out code on the remote host.
+Can be set to “export”
+:checkout "co"
+
+Hash of additional options passed to the SSH connection routine.
+This lets you set (among other things) a non-standard port to connect on:
+(ssh_options[:port] = 2345)
+:ssh_options Hash.new
+
+Whether or not tasks that can use sudo, ought to use sudo. In a shared
+environment, this is typically not desirable (or possible), and
+in that case you should set this variable to false
+:use_sudo true
-:sudo Sets the path to sudo
+Sets the path to sudo.
+:sudo
+
+variables are set via:
+set :application, "flipper"
########## Interactive Shell ##########
(requires capistrano-1.2.0)
Shell is essentially a SSH interface to your
servers, so you can run standard commands such
as 'ls' or 'cp' as well as Capistrano-specific ones.
Start the interactive Capistrano shell
$ cap -v shell
Execute Capistrano tasks
cap> !deploy
cap> !update_code symlink
cap> !setup deploy
cap> on app2.foo.com !setup
cap> with app,db !setup deploy