Capistranoでアプリケーションのデプロイ作業を効率化
デプロイを行う
初めてデプロイする場合は以下のコマンドを実行します。
$ cap deploy:cold
上記コマンドを実行することで、大まかには以下の処理が実行されます。
- SSHでデプロイ先にログイン
- subversionから最新のソースコードを取得
- 最新のソースコードを配置(同時にバックアップを行う)
- migrationを実行
- deploy:startタスクの実行(Apacheの起動、再起動)
これで、/home/okitsu/www/moonlinx/currentに最新のアプリケーションが配置されます。
このcurrentディレクトリはdeploy:coldを実行したタイミングで作成されるのですが、releasesに配置されたディレクトリへのシンボリックリンクになります。
(例) current -> /home/okitsu/www/moonlinx/releases/20090402092810
Capistranoは、このcurrentディレクトリのシンボリックリンクを変えていくことで最新版を切り替えています。PassengerとCapistranoを利用する場合は、このcurrentディレクトリ内のpublicディレクトリをhttpd.confのDocumentRootに設定することになります。
(設定例) DocumentRoot /home/okitsu/www/moonlinx/current/public
2回目以降にデプロイする場合は、以下のコマンドを利用してください。
$ cap deploy
deploy:coldとの大まかな違いは以下です。
- migrationは実行されない
- ウェブサーバの起動はdeploy:startではなく、deploy:restartタスクが実行される
:coldをつける、つけないは、migrationの有無で使い分けをするのがよいと思います。
以上がCapistranoにおける基本的な操作方法です。
通常のサービスの場合、本番環境のほかにステージング環境が用意されている場合が多いと思います。しかし、本番とステージングでデプロイ先が異なる場合、deploy.rbをその都度書き換えてデプロイするのでは、作業が煩雑になります。その場合は、capistrano-extというプラグインを利用するすることで解決できます。
capistrano-extは、gemでインストールできます。
$ sudo gem install capistrano-ext
capistrano-extをインストールしたら、もともとあったdeploy.rbを以下に書き換えてください。
# config/deploy.rb: set :stages, %w(staging production) set :default_stage, "staging" require 'capistrano/ext/multistage'
このようにすることで、staging用とproduction用のデプロイファイルを以下のように分けることができるようになります。
config/deploy/staging.rb config/deploy/production.rb
共通部分をconfig/deploy.rbに書いて、production.rb、staging.rbは差分だけ書くことも可能です。あとは、以下のようにcapコマンドの第一引数に環境名を指定するだけで切り替えられるようになります。
# ステージング環境の場合 $ cap deploy # 本番環境の場合 $ cap production deploy
環境名を指定しない場合は、deploy.rbの「default_stage」で設定した環境が利用されることになります。これでステージング環境にも簡単に対応が可能です。
デプロイの効率化は安心にもつながる
Capistranoの説明は以上です。今回はRuby on RailsでのCapistrano利用方法のみを説明しましたが、他のフレームワークや言語でも十分に活用できるデプロイツールです。
デプロイ作業の効率化はリリース時間の大幅な削減といった効果だけでなく、自動的な世代管理、簡単なロールバックといった機能も心強く、リリース時の安心感は大きく高まります。是非読者の開発現場に適応してみてください。
次回は、moonlinxで利用しているJavaScript版音楽プレイヤーを説明したいと思います。
- ホワイトペーパー



