読者です 読者をやめる 読者になる 読者になる

rvm-capistranoを使わずRVM使用のサーバにCapistranoでデプロイする

Rails Ruby memo

デプロイ先のRubyがRVMだと、そのままだとRubyCapistranoが見つけてくれないので、うぐっとなります。

しかし、デプロイする側のローカル環境でもRVMを使っている場合には、rvm-capistranoというgemをインストールして使うと、ちょこっと設定を付け足すだけで、うまいこと処理してくれるようになります。


では、デプロイする側にRVMが入ってなかった場合はどうするのかというと、deploy.rbに:default_environmentを設定してやればOKです。

自分の場合はこのようにしました。

#deploy.rb
#remote rvm path
set :rvm_base_path, "/home/deploy_user/.rvm"
set :rvm_rb_version, "ruby-1.9.3-p194"
set :rvm_rb_path, rvm_base_path+"/gems/"+rvm_rb_version
set :default_environment, {
  'PATH' => "#{rvm_rb_path}/bin:#{rvm_rb_path}@global/bin:#{rvm_base_path}/rubies/#{rvm_rb_version}/bin:$PATH",
  'GEM_HOME' => rvm_rb_path,
  'GEM_PATH' => "#{rvm_rb_path}:#{rvm_rb_path}@global",
  'BUNDLE_PATH' => "#{rvm_rb_path}/bin"
}

重複部分を変数にまとめました。
各PATHの実際の値は、デプロイ先のサーバーに、デプロイするユーザーで入って、rvm infoして出てきた値を記述してます。
BUNDLE_PATHはwhich bundleして確認しました。


開発側が、rbenvとRVMをばらばらに使ってたのでこんな話になりました。