一つのサーバーにproduction環境が2つある場合の Capistrano

一つのサーバーに本番用のproduction環境環境と、次期開発用のproduction環境を置いているケースがありますよね。
間違って本番用の環境を変更してしまったりすると大変な事になるので、極力避けたいですが大人の事情でそうなってしまう場合があります。

http://www.capify.org/images/logo-big.png

Railsの実行環境は違うディレクトリー (set :deploy_to, "....") を変えればOKですが、
データベース名は本番と次期開発で分ける場合はどうしましょうか?

config/database.yml を本番用と次期開発用を持ち、次期開発環境にデプロイする際には config/database.yml を次期開発環境用のものを使えば良さそうです。

Capistrano 各タスクの実行前後に独自の処理を差し込めるフック機能があります。例えば コードの更新(svn,git等から最新のコードを取り出す)update_codeの後に何かを行いたい場合は、 task :after_update_code, ... do を config/deploy.rb に定義します。


ということで、このように書くと次期開発環境用のdatabase.ymlが使われるようになります。ついでにロゴ画像も変えて次期開発環境で有ることを判り易くしています(間違って本番環境を操作していた^^; などという事を防げます)。

set :application, "xxxxx"
set :domain,      "xxxxx.yyyy.co.jp"

namespace :deploy do
  # コードを更新後、次期開発環境用ファイルへの変更を行う
  task :after_update_code, :roles => :app do
    run "mv #{latest_release}/config/database_test.yml #{latest_release}/config/database.yml"
    run "mv #{latest_release}/public/images/logo_test.png #{latest_release}/public/images/logo.png"
  end
end