Webistrano で Catalyst で作ったアプリをデプロイする
とある Subversion をリポジトリとするプロジェクトで、デプロイツールとして Capistrano を使用しようと思ったのですが、私と同僚の開発環境が異なる事を理由に、前から目を付けていた Webistrano を試してみました。
動作環境
apache | 2.2.9 |
mysql | 5.0.67 |
ruby | 1.8.6 |
rails | 2.1.0 |
passenger | 2.0.3 |
capistrano | 2.5.0 |
webistrano | Revision 189 |
webistrano 本体は http://labs.peritor.com/svn/webistrano/trunk/ からチェックアウトしたものを使用しています。
基本的な使い方
下記を眺めると、何となく理解できます。
Screencasts – Peritor Webistrano – Trac
Catalyst で作ったアプリをデプロイする
Export capfile メニューから Capfile を参照すると、一行目で load 'deploy' していたので /path/to/lib/capistrano/recipes/deploy.rb を眺めながら下記の Recipe を書いてみました。
下記は古い Recipe です。最新は、gist: 20946 ― GitHub にあります。新しい版は、:shared_dirs を指定する事で :shared_children にディレクトリのリストを追加できるようになっています。
namespace :deploy do desc "finalize update." task :finalize_update, :except => { :no_release => true } do run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true) run <<-CMD rm -rf #{latest_release}/log && ln -s #{shared_path}/log #{latest_release}/log CMD end desc "restart app servers." task :restart, :roles => :app, :except => { :no_release => true } do sudo "/usr/local/etc/rc.d/apache22 stop" sudo "/usr/local/etc/rc.d/apache22 start" end task :before_setup do set :shared_children, %w(log) end end
感想
「デプロイ元の環境に依存せず、Web U/I から簡単にデプロイできる」という事を差っ引いても、複数の Stage を登録でき、細かい用途毎に Recipe を分割管理できるので、利便性が非常に高く感じられます。
これに慣れると、素の capistrano なんて使ってられないなぁ。