vlad 使ってみた
投稿者 okkez
Vlad the Deployer を使ってみた。
Rails アプリケーションのデプロイツールを Capistrano から vlad に移行してみたら簡単だったけどメモっておくことにする。 ほとんど vlad のドキュメントに書いてあるのだけど、一応。
インストール
$ sudo gem install vlad
で OK.
セットアップ
Rakefile に以下のように記述する。
begin
require 'vlad'
Vlad.load :app => :thin, :web => :nginx
rescue LoadError
# nothing to do
endまた RAILS_ROOT/config/deploy.rb を用意する。
set :application, "application name"
set :domain, 'example.com'
set :repository, "file:///path/to/repository"
set :deploy_to, "/path/to/#{application}"これだけで完了。
SSH を使う
SSH を使ってリモートデプロイする場合は ~/.ssh/config を編集する必要があるかもしれない。 うちの場合はデフォルトの秘密鍵をデプロイ先のサーバに登録してあるので必要なかった。
パスフレーズを入力するのが面倒な人は ssh-agent とか keychain とか使うといいです。 Debian なら両方共パッケージが用意されているし。
さらにうちの場合は、リポジトリをデプロイ先のサーバに同居させているので ‘file://’ になるわです。 そうでない場合は svn で使えるパスの記述形式は全部通るはずなので、好きな様に書くといいと思います。
デプロイ
以下で OK です。 capistrano の時より簡単かもしれないです。 あと、 vlad:setup で thin の設定ファイルを生成してくれたのは地味に便利だった。
$ rake vlad:setup # 最初の一回だけ $ rake vlad:update # 毎回 (デプロイ先で必要なファイルを SCM 経由で取得する) $ rake vlad:migrate # 毎回 (デプロイ先で rake db:migrate する) $ rake vlad:start # 毎回 (app, web を restart する)
nginx まで再起動しないで欲しい
バカ正直に vlad に web server は nginx ですって教えてあげたら rake vlad:start で nginx まで再起動されて迷惑だった。 いくら nginx が再起動早くても一つのサービスをデプロイするのに複数のサービスを止めたら意味ないので、何もしないようにするにはどうすればいいか調べてみた。
ソースを読んだら :web => nil でいけそうだったけど、エラーが発生して無理だったので 何もしないタスクを作って以下の様に Rakefile を修正した。 特に passenger や thin を使っている人には必要だと思うのだけど、どうなんでしょう。
begin
require 'vlad'
Vlad.load :app => :thin, :web => :nothing
rescue LoadError
# nothing to do
endんで、 vlad/nginx.rb のあるディレクトリに vlad/nothing.rb をコピーして中身を編集したら予想通り nginx の再起動は実行されなくなりました。
Vlad.load のオプションを使えば色々なことが出来そうです。 デフォルトが、結構充実しているのですが、いらんこともしてくれる vlad なのでした。 しかし、そのデフォルトの挙動を簡単に変えられるのであまり困りませんでした。
ただ、デフォルトで何もしないターゲットを読み込むファイルは各オプションにあってもいいのかなぁとか思いました。
追記
やっぱり :web => nil で OK だった。
:web => nil だと vlad:start などが定義されないようだ。 なので、そのときは rake vlad:start_app を実行する必要がある、と。
:web => nil でも vlad:start は定義されて欲しいなぁ。


