rvm-capistranoを使わずRVM使用のサーバにCapistranoでデプロイする
デプロイ先のRubyがRVMだと、そのままだとRubyをCapistranoが見つけてくれないので、うぐっとなります。
しかし、デプロイする側のローカル環境でも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をばらばらに使ってたのでこんな話になりました。