Rails で Capistrano
Capistrano の基本的な使い方 が分かったので、今度は Rails App での Capistrano の利用を見てみたい。
前提条件
まず、利用にあたり、前提条件は以下。- Ruby on Rails APP をデプロイしたい
- Subversion を利用している
- プロダクション先は決定している
- ソフトウェア, DBMS サーバ
- Subversion レポジトリとデプロイ環境のユーザ名が同一
- Subversion レポジトリはローカルホストからも、デプロイ先のサーバからもアクセス可能
- ターゲットホストには公開鍵を使い ssh 経由でアクセスできること
- データベースが作成され、APP が利用するユーザ名でクエリ発行可能な状態になっていること
Capistrano 初期設定
Rails APP で Capistrano を利用するにあたり、- Capfile を APP の ルートディレクトリに設置
- デプロイに関する基本設定を記述する config/deploy.rb を用意
する。これらのスタブファイルを capify コマンドで作成する。
# capify . [add] writing `./Capfile' [add] writing `./config/deploy.rb' [done] capified!
"cap -T" コマンドで、この初期設定により利用可能になるタスクの一覧 (多くはデプロイに関連するもの) を見ることができる。
# cap -T cap deploy # Deploys your project. cap deploy:check # Test deployment dependencies. ....... Extended help may be available for these tasks.
"cap -e" で各タスクの詳細な説明を見ることができる。
# cap -e deploy:symlink ------------------------------------------------------------ cap deploy:symlink ------------------------------------------------------------ Updates the symlink to the most recently deployed version. Capistrano works by putting each new release of your application in its own directory. When you deploy a new version, this task's job is to update the `current' symlink to point at the new version. You will rarely need to call this task directly; instead, use the `deploy' task (which performs a complete deploy, including `restart') or the 'update' task (which does everything except `restart').
プロジェクトの詳細を設定
capify により以下のような config/deploy.rb が生成される。set :application, "set your application name here" set :repository, "set your repository location here" # 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, "your app-server here" role :web, "your web-server here" role :db, "your db-server here", :primary => true
上記の引数を、プロジェクトの設定に書き換える。
Capistrano はデフォルトでは /path/to/yourapp/ にデプロイする。
デプロイ先が元のディレクトリと異なる場合には、deploy_to 変数をセットする。
set :deploy_to, "your deploy_to directory"
ゲートウェイ
セキュリティ上、ゲートウェイを設定したい場合は、config/deploy.rb にて以下のようにゲートウェイサーバを指定する。set :gateway, "your_gateway_server"
spin ファイルの設定
以下、3001 番ポートでの Mongrel デーモンを仮定する。script/process/spawner を呼出す spin スクリプトを書き、script ディレクトリ以下に配置する。
まず、script/spin ファイルを作成し、以下のように記述する。
#!bin/sh /path/to/yourapp/script/process/spawner -p 3001 -i 1
実行権限を与える。
#chmod u+x script/spin
これにより、script/spin で Mongrel を起動、再起動が可能になる。
複数の Mongrel プロセスを立ち上げる場合には、spin ファイルは以下のようになる。
/path/to/yourapp/script/process/spawner -p 3001 -i 3
これで、3 Mongrel プロセスが起動する。
セットアップ
Capistrano 最初のコマンドを発行する。# cap deploy:setup * executing `deploy:setup' * executing "umask 02 && mkdir -p /home/haida/ /home/haida/releases /home/haida/shared /home/haida/shared/system /home/haida/shared/log /home/haida/shared/pids" servers: ["your_app_server"] * establishing connection to gateway `your_gateway_server' starting connection to gateway `your_gateway_server' gateway connection established * establishing connection to `your_app_server' via gateway connected: `your_app_server' (via gateway) [your_app_server] executing command command finished
Capistrano はサーバにログインし、以下のようなディレクトリ階層を作成する。
#{deploy_to}/ #{deploy_to}/releases #{deploy_to}/shared #{deploy_to}/shared/log #{deploy_to}/shared/system #{deploy_to}/shared/pids
依存関係のチェック
Capistrano のデプロイに必要なソフトウェアが全てインストールされているか、以下のコマンドで確認する。# cap -q deploy:check
You appear to have all necessary dependencies installed
実際に deploy:check タスクが何をしているかは -q (Quiet オプション) を取って実行すると確認できる。
Cold デプロイ
初期のデプロイ時には APP はまだ走っていない "cold" 状態。そこで "cold" タスクを実行する。# cap deploy:cold
このタスクはコードをサーバに移動し、マイグレーション、spin スクリプトを実行する。
これ以降の deploy は
# cap deploy
で実行する。
ロールバック
ひとつ前のリリース状態には以下のコマンドで簡単に戻せる。# cap deploy:rollback