-
Notifications
You must be signed in to change notification settings - Fork 69
Multistage deployments
Many developers prefer to have a staging server that is configured very similar to, if not completely identical to, the production server. Capistrano provides multistage deployment through the capistrano-ext gem.
Moonshine can be used with the capistrano-ext gem quite easily. Most of the deployment information for your server goes into config/moonshine.yml
so we can just keep the parts that change in config/deploy.rb
and the stage files under config/deploy/
. For this example, we’ll assume that there are two servers- production and staging. Our deploy files would only need to contain the following.
config/deploy.rb
set :stages, %w(staging production) require 'capistrano/ext/multistage'
config/deploy/production.rb
server "domain.com", :app, :web, :db, :primary => true
config/deploy/staging.rb
server "staging.domain.com", :app, :web, :db, :primary => true
Now you can deploy to staging with cap staging deploy
or to production with cap production deploy
.
If you have settings that need to be different between your stages, you can use the following techniques.
# only use configuration or plugins on a particular stage: if deploy_stage == 'production' configure(:ssh => {:allow_users => ['rob','rails']}) plugin :ssh recipe :ssh end # use different values depending on the stage configure( :mysql => { :extra => "bind-address = 10.0.0.#{deploy_stage == 'production' ? 10 : 20 }" })
Within a recipe, you can use the on_stage method:
recipe custom # configuration for every stage on_stage :production do # configure packages, crons, etc. for production only end end recipe :custom