Capistranoでアプリケーションのデプロイ作業を効率化

沖津貴智(moonlinxチーフエンジニア)
2009-07-06 20:12:01
  • このエントリーをはてなブックマークに追加

 次に、Railsアプリケーションのカレントディレクトリへ移動し、capifyコマンドを実行します。

$ cd moonlinx
$ capify . #←カレントを示すドットを忘れないように
[add] writing `./Capfile'
[add] writing `./config/deploy.rb'
[done] capified!

 Capfileと/config/deploy.rbファイルが作成されます。Capfileとは、makeにおけるMakeFileのようなものです。Railsの場合、実際の設定やタスクは、config/deploy.rbに記述するため、Capfileは特に無視しても構いません。

 また、config/deploy.rbには標準で、すでにRails向けに複数のタスクが用意されているため、独自のタスクを作らない限りパラメータの設定だけで利用可能です。この手軽さもCapistranoの大きな魅力です。

 利用できるタスクは、以下のコマンドで確認できます。

$ cap -T
cap deploy # Deploys your project.
cap deploy:check # Test deployment dependencies.
cap deploy:cleanup # Clean up old releases.
cap deploy:cold # Deploys and starts a `cold' application.
cap deploy:migrate # Run the migrate rake task.
cap deploy:migrations # Deploy and run pending migrations.
cap deploy:pending # Displays the commits since your last deploy.
cap deploy:pending:diff # Displays the `diff' since your last deploy.
cap deploy:restart # Restarts your application.
cap deploy:rollback # Rolls back to a previous version and restarts.
cap deploy:rollback_code # Rolls back to the previously deployed version.
cap deploy:setup # Prepares one or more servers for deployment.
cap deploy:start # Start the application servers.
cap deploy:stop # Stop the application servers.
cap deploy:symlink # Updates the symlink to the most recently deployed ...
cap deploy:update # Copies your project and updates the symlink.
cap deploy:update_code # Copies your project to the remote servers.
cap deploy:upload # Copy files to the currently deployed version.
cap deploy:web:disable # Present a maintenance page to visitors.
cap deploy:web:enable # Makes the application web-accessible again.
cap invoke # Invoke a single command on the remote servers.
cap shell # Begin an interactive Capistrano session.

 開発の現場で頻繁に利用するコマンドは、deploy、deploy:cold、deploy:migrateです。また、rollbackとweb:disable/enableという便利なコマンドがあります。これは後々説明したいと思います。

 次にcapifyで作成したconfig/deploy.rbの設定を見ていきたいと思います。1行ずつ順を追って確認します。

set :application, "set your application name here"

アプリケーション名を設定してください。
(例)set :application, "moonlinx"
set :repository, "set your repository location here"

subversionのリポジトリのアドレスを設定してください。
(例)set :repository, "svn+ssh://svn.moonlinx.jp/svn/moonlinx"

 デフォルトはsubversionですが、gitも利用できます。gitを利用する場合は、以下の記述を追加してください。

set :scm, :git
role :app, "your app-server here"
role :web, "your web-server here"
role :db, "your db-server here", :primary => true

 ここには、各サーバのアドレスを設定します。appは、Railsを動作させるアプリケーションサーバを指定します。webはウェブサーバです。moonlinxのように、Passengerを使ってApache上でRailsを動作させている場合は、appとwebには同じサーバを指定して問題ありません。

 Mongrel+Apacheで運用しているような場合には、それぞれ別に設定する必要があります。dbにはDBサーバを設定したいところですが、実際にはRailsのmigrateを実行するサーバを指定します。

(例)
role :app, "moonlinx.jp"
role :web, "moonlinx.jp"
role :db, "moonlinx.jp", :primary => true

 上記では1つのRailsアプリケーションを1サーバで動作させる場合の設定ですが、ロードバランサなどでスケールしているような場合には、デプロイ先を複数記述することですべてのサーバに平行でデプロイが行われます。これがCapistranoの最も魅力的な部分です。

 デプロイ先を複数設定する例は以下の通りです。

(例)
role :app, "192.168.128.1"
role :app, "192.168.128.2"
role :app, "192.168.128.3"
role :web, "192.168.128.1"
role :web, "192.168.128.2"
role :web, "192.168.128.3"
role :db, "192.168.128.1", :primary => true

 次に、アプリケーション配置先のディレクトリパスを設定します。配置先は任意の値に設定します。

set :deploy_to, "/home/okitsu/www/#{application}"

 また、これまでsetしたシンボルはそのまま変数として利用できるため、#{application}のように式展開を利用する事も可能です。上記例では、「set :application, "moonlinx"」と初めに指定したので、”moonlinx”となります。

 次に、デプロイ時にRailsアプリケーションを再起動するタスクを登録します。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]