Capistrano で簡単に複数サイトへのデプロイを行えるようにする

Capistrano複数サイトへのデプロイを1つの設定ファイルで行える事を最近知ったので書いておきます。


Webシステムでは本番環境以外に最終確認の為のStaging環境を持つことが多いと思います、Staging環境は本番環境とは別のサーバーだったり、同じサーバーでもディレクトリー(URL)が別だったりします。そのような環境へのデプロイも1つの設定ファイルで運用できます。

例 : Staging環境は本番環境が別サーバー

config/deploy.rb

ssh_options[:forward_agent] = true
set :application, "abc"
set :scm,         :git
set :repository,  "ssh://abc@abc_git.com/var/lib/git/#{application}.git"
set :branch,      'master'
set :deploy_via,  :remote_cache
set :deploy_to,   "/home/rails_app/#{application}"
set :use_sudo,    false

task :staging do
  set :domain,      "abc_staging.net"
  set :user,        "abc_dev"
  set :rails_env,   :staging

  role :app, domain
  role :web, domain
  role :db,  domain, :primary => true
end

task :production do
  puts "\n\e[0;31m Are you REALLY sure you want to deploy to production? \e[0m\n"
  proceed = STDIN.gets[0..0] rescue nil 
  exit unless proceed == 'y' || proceed == 'Y' 
  
  set :domain,      "abc.co.jp"
  set :user,        "abc_pro"
  set :rails_env,   :production

  role :app, domain
  role :web, domain
  role :db,  domain, :primary => true
end

この設定で staging へのデプロイは

cap staging deploy

本番環境へのデプロイは

cap production deploy

で行えます。さらに本番環境へデプロイでは 赤字で Are you REALLY sure you want to deploy to production? とコンソールに確認が出るので、間違って本番へデプロイしてしまうのが防げます。
(本番へのデプロイ時はここで、大きく深呼吸してから Y をキーインすると良いと思います)

おまけ

Staging環境は本番環境が似たURLだと間違って本番サーバーでおかしな操作をしてしまったりすると大変なので、下の画像のように Staging環境 で動かした時は画面の目立つ所な何かマークを出すと良いと思います。