RVMとCapistranoを組み合わせて使う

デプロイ先のRubyをRVMで入れている場合、そのRubyをCapistranoが見つけてくれないのでうまくデプロイが進まない現象が起こる。
それをうまく動かすためにひと工夫。

rvm capistrano plugin

Capistranoを実行するマシンとデプロイ先のマシンの両方にRVMの1.0.1以上が入っている場合は、RVMのプラグインで解決できる。これはデフォルトで入っているので特にインストールしたりする必要はない。

deploy.rbの先頭に以下のコードを追加。

set :rvm_type, :user
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))

require "rvm/capistrano"
set :rvm_ruby_string, '1.9.2'

rvm_typeはRVMをrootでインストールしている場合は指定しなくてよい。
rvm_ruby_stringにはデプロイ先で使うものを書く。

:default_environment

RVMのバージョンが古い場合など上記の手段が使えない場合には、default_environmentを設定するという方法があるらしい。
こっちは試してないので参考URLそのままのコードになるが一応貼っておく。これもdeploy.rbに書く。

set :default_environment, {
  'PATH' => "/path/to/.rvm/gems/ree/1.8.7/bin:/path/to/.rvm/bin:/path/to/.rvm/ree-1.8.7-2009.10/bin:$PATH",
  'RUBY_VERSION' => 'ruby 1.8.7',
  'GEM_HOME'     => '/path/to/.rvm/gems/ree-1.8.7-2010.01',
  'GEM_PATH'     => '/path/to/.rvm/gems/ree-1.8.7-2010.01',
  'BUNDLE_PATH'  => '/path/to/.rvm/gems/ree-1.8.7-2010.01'  # If you are using bundler.
}

参考

RVM: Ruby Version Manager – RVM with Capistrano