z, ? | toggle help (this) |
space, → | next slide |
shift-space, ← | previous slide |
d | toggle debug mode |
## <ret> | go to slide # |
c, t | table of contents (vi) |
f | toggle footer |
r | reload slides |
n | toggle notes |
p | run preshow |
P | toggle pause |
skypekit, libskypekit, activeresource-persistent, rack_session_access, rspec-example_steps, libevent, x11_client, capistrano-multiconfig ...
$ capify .
group :deploy do
gem 'capistrano'
gem 'capistrano-ext'
end
config/deploy
├── deploy.key
├── production.rb
└── staging.rb
(convention)
$ gem install caphub
$ caphub my_deploy
my_deploy/
├── config/ # your configurations
├── lib/ # your extensions
├── recipes/ # your recipes
├── Gemfile # OSS extensions/recipes
└── Capfile # initialize everything
core implementation of caphub concept
# multistage (2-level) $ tree config ├── deploy.rb └── deploy ├── production.rb ├── qa.rb └── ...
# multiconfig (N-level) $ tree config ├── deploy.rb ├── deploy │ ├── api.rb │ ├── api │ │ ├── production.rb │ │ ├── qa.rb ... ... └── ...
$ cap qa deploy $ cap production deploy
$ cap api:qa deploy $ cap api:production deploy
Synopsis
$ cap CONFIGURATION RECIPE1 [RECIPE2 ...]
Example
$ cap blog:qa unicorn:reload resque:reload
# Layout per application/project . ├── config │ ├── deploy │ │ ├── blog │ │ │ ├── production.rb │ │ │ └── qa.rb │ │ └── wiki │ │ ├── production.rb │ │ └── qa.rb │ ├── keys │ └── deploy.rb ├── recipes ├── Capfile └── Gemfile
# Layout per environment/stage . ├── config │ ├── deploy │ │ ├── production │ │ │ ├── blog.rb │ │ │ └── wiki.rb │ │ └── qa │ │ ├── blog.rb │ │ └── qiki.rb │ ├── keys │ └── deploy.rb ├── recipes ├── Capfile └── Gemfile
Production deploy
$ cap blog:production deploy $ cap wiki:production deploy
$ cap production:blog deploy $ cap production:wiki deploy
# config/deploy.rb
set :scm, :git
# config/deploy/blog.rb
set :repository, 'git://github.com/me/blog.git'
# config/deploy/blog/production.rb
server 'blog.example.com', :app
# config/deploy/blog/qa.rb
server 'blog-qa.example.com', :app