Capistrano を使ってみた
投稿者 okkez
Ruby で作られたデプロイツール Capistrano を使ってみたので使い方をまとめておく。
インストール
gem でインストールする。
$ sudo gem install capistrano
依存ライブラリも入るはず。
最初の一歩
こでは2.2.0を使用する。
$ cap --version Capistrano v2.2.0 $ cd ~/railsapp/ $ capify .
Rails アプリを作成しているディレクトリに移動して capify コマンドを実行するだけで その Rails アプリは Capistrano 対応になる。
capify コマンドでは以下のファイルが生成される。 * Capfile * レシピファイル * config/deploy.rb * 設定ファイル
あとは config/deploy.rb を編集するだけで良い。
config/deploy.rb の編集
set :application, "application name"
set :repository, "/path/to/repository"
set :deploy_to, "/path/to/deploy/path"
role :app, "application server"
role :web, "web server"
role :db, "databese server", :primary => trueset :hoge のところは特に説明は不要だと思う。しかし、set :repository の設定でちょっとハマったので後述する。 role の方は、各サーバーの名前や IPアドレスを記述する。ドキュメントによると複数のサーバを指定することも可能なようだ。 ウチでは全部同じサーバなのでそういう風に設定した。
$ cap deploy:setup
これでデプロイ先にディレクトリが作成される。
$ cap -q deploy:check
これで足りないものが無いかチェックしてくれる。
$ cap deploy:cold
初回のデプロイは上記コマンドを実行する。二回目以降は以下を実行する。
$ cap deploy
簡単ですね!
ハマりポイント
ウチのサーバの構成。
[作業マシン] <- [The Internet] -> [サーバ](app, web, db, svn) # 間の通信は svn or http
ご存知のとおり、Subversion は svn, svn+ssh, file, http, https などのプロトコルに対応している。 自分の場合は、 svn+ssh でアクセスするようにしていたので最初はそのように設定した。
その場合、以下のように実行されるようでうまく行かなかった。
- ローカルでリポジトリの情報を取得
- app サーバに ssh で乗り込む[a]
- appサーバから svn+ssh でリポジトリからデータを取得[b]
3番の部分で ssh のコネクションが突然閉じてしまう。ログを確認してもよく分からなかったのであまり調査せずに サーバに乗り込んでから cap コマンドを実行するようにした。
リポジトリの設定だけ file:// を使用するように変更した。
今のところうまく動いているので、もう少し時間のある時にしっかり調べてみようと思う。


