Capistrano でデプロイしてみる
2007/02/27
Ruby on Rails で作ったアプリケーションを配置ツール Capistranoでデプロイしてみました。環境は
- 開発環境: Windows XP
- デプロイ先: CentOS 4.4 + mongrel
です。
まずは開発環境での作業。
1. Capistrano をインストール
> gem install capistrano -y
2. レシピファイルと Rake タスクを作成
アプリケーションディレクトリの親ディレクトリにて以下を実行。
> cap -A APP_DIR
以下のファイルが生成される。
- APP_DIR/config/deploy.rb:レシピファイル
- APP_DIR/lib/tasks/capistrano.rake:Rake タスク
3. レシピの記述
アプリケーション名と SVN レポジトリを記述
set :application, "app"
set :repository, "svn://svn.example.com/rails/#{application}/trunk"
デプロイ先のホスト名を記述
role :web, "example.com"
role :app, "example.com"
role :db, "example.com"
web(フロント)、app(バックエンド)、db(データベース)とも同一サーバなので同じホスト名を記述。
デプロイ先のパスと SSH のユーザ名を記述
set :deploy_to, "/home/hara/rails/#{application}"
set :user, "hara"
4. デプロイ
まずはデプロイ準備
> rake remote:setup
いよいよデプロイ
> rake deploy
restart タスクで FastCGI の再起動に失敗したが、今回は mongrel を使うので無視した。deploy タスクは、内部で remote:update_code, remote:symlink, remote:restart を呼んでいるので、気持ち悪ければ deploy の代わりに
> rake remote:update_code
> rake remote:symlink
としてもよいはず。またはレシピに
desc "Don't restart the web server"
task :restart, :roles => :app do
end
とでも書いて、restart タスクを空っぽに上書きしてやればよい。
以上でデプロイ先の /home/hara/rails/app 以下にアプリケーションがデプロイされた。
後はデプロイ先での作業。
- public/dispatch.rb に記述された Ruby のパスを変更
- rake migrate
- mongrel_rails start
すればよい。Rake タスクを書けば、これも自動化できるはずだが、今回は省略。