massの日記

日々の薪

Capistranoのdeploy.rbを今更よんでみて、タスクの挙動をまとめてみた(その2)

最近はデプロイもツールを使って一発になったけど、タスクの挙動をよく忘れてしまうので、備忘録をつけてみた。
フレームワーク:RubyOnRails
  バージョン:3.1.0
デプロイツール:Capistrano
  バージョン:2.9.0

書き方の例

$ 実際に打つコマンド
# 内部処理

リリースしたけど、バグが出たので、1つ前のソースに巻き戻す。
1つ前のリリースに戻し、再起動をかけ、最新のリリースソースを削除する。リリース後、バグが発覚し、巻き戻すならこれ。

$ cap deploy:rollback
# revision
# restart
# cleanup

1つ前のリリースに戻し、最新のリリースソースを削除する。再起動は行わない。

$ cap deploy:rollback:code
# revision
# cleanup

カレントディレクトリの向け先を1つ前のリリースディレクトリに変更する。シンボリックリンクの付け替え。

$ cap deploy:rollback:revision
# シンボリックリンクの削除、シンボリックリンクの作成

シンボリックリンクの向き先が最新のディレクトリでなかった場合、そのディレクトリを不要とみなして削除する。

$ cap deploy:rollback:cleanup
# シンボリックリンクの向け先を確認して、リンク先でなければ削除


最新ソースの配置、migrate、シンボリックリンクの付け替え、再起動。

$ cap deploy:migrations
# update_code
# migrate
# symlink
# restart

プライマリである(つまりマスタ)DBにmigrationをかける。ここは結構カスタムができるので。セットする値も抜粋。でも、これは完全にRails用だから、別の部分でmigrateするなら、それ用のタスクを自分で作成した方がよさそう。

$ cap deploy:migrate
# set :rake,           "rake"
# set :rails_env,      "production"
# set :migrate_env,    ""
# set :migrate_target, :latest
# #{rake} RAILS_ENV=#{rails_env} #{migrate_env} db:migrate

過去のリリースソースのお掃除
リリースディレクトリを含んで、最新N個のディレクトリ以外は削除する。不要ファイルをつもらせないために定期的にやった方がよさそう。最悪N個はディレクトリが残るので、N-1前のリビジョンまでは残せる。リリース回数がN回より少ない場合は、何もしない。(Nはデフォルトで5)

$ cap deploy:cleanup

停止状態からのサービスの起動。
ソースの配置、シンボリックリンクの作成、migrate、スタートをしてくれる。停止と再起動のどちらでもなく、ただの起動なので、アプリケーションが動いていない状態で行うコマンド。

$ cap deploy:cold
# update
# migrate
# start