[rails][apache][capistrano] capistranoを使ってmod_proxy_balancer+mongrelの環境にdeployが出来るようにする

まずはcapitranoやmongrelをインストール

$ sudo su -
# gem install capistrano mongrel mongrel_cluster -y

apacheのmod_proxy_balancerの設定をする


ServerName rails_app.domain

ProxyPass / balancer://cluster/ timeout=2
ProxyPass /balancer-manager !


SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168.11.0/24


Order Deny,Allow
Allow from all


BalancerMember http://localhost:10000 loadfactor=10
BalancerMember http://localhost:10001 loadfactor=10
BalancerMember http://localhost:10002 loadfactor=10

とりあえずapacheを再起動

# apache2ctl restart

railsのアプリケーションにcapistranoを追加する

$ cd ~/project/rails_app
$ capify .
[add] writing `./Capfile'
[add] writing `./config/deploy.rb'
[done] capified!

config/deploy.rbに設定を書く

require 'mongrel_cluster/recipes'

set :application, "rails_app"
set :repository,  "svn://192.168.11.111/var/svn/rails_app/trunk"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/var/www/#{application}"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion

role :app, "192.168.11.111"
role :web, "192.168.11.111"
role :db,  "192.168.11.111", :primary => true

set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"

after "deploy:update_code" do
  run "cp #{shared_path}/system/*.yml #{latest_release}/config/"
end

after "deploy:update_code"の部分は読んでそのままdeploy:update_codeを実行した後に実行される。今回は後で解説するdatabase.ymlをコピーするために使う。FastCGIなんかで動かす場合はパーミッションの変更とかが必要になるのでそういったこともここに書いておけばいい。


mongrel_cluster.ymlを作成する config/の下に作成する

user: rails
group: rails
cwd: /var/www/rails_app/current
log_file: /var/www/rails_app/shared/log/mongrel.log
port: 10000
environment: production
pid_file: /var/www/rails_app/shared/pids/pid
servers: 3

この設定だとport番号10000、10001、10002の3つをmongrelが使うことになる。
ここは空いているポート番号を使えばいい。mongrel_cluster.ymlもリポジトリに入れるのを忘れないように。

$ svn status | grep '?' | cut -c8- | xargs svn add
$ svn ci -m "add deploy settings."

まずはここでいったん deploy:setup を実行する

$ cap deploy:setup

するとデプロイ先サーバーのデプロイ先ディレクトリ(上の場合だと192.168.11.111の/var/www/rails_app)にsharedとreleaseというディレクトリができる。
database.ymlにproduction環境のパスワードを記述するというのもあまりいいことではないので上のdeploy.rbのところで解説したようにデプロイ先サーバー、デプロイ先ディレクトリの shared/system/にdatabase.ymlを設置する

@dest_server: $ vi /var/www/rails_app/shared/system/database.yml
production:
  adapter: mysql
  database: raiils_app_production
  username: user
  password: password
  socket: /var/run/mysqld/mysqld.sock

あとはデプロイを実行してmongrelをスタートさせる

$ cap deploy:cold
$ cap deploy:migrate
$ cap deploy:start

昨日やったことだけど確かこんな感じだったはず。