サポート
RVMはボランティアのコミュニティによってメンテナンスされています。問題はRVM issues trackerに報告してください。
もし協力できる、またはメンテナーの一員になりたい場合は、ぜひ協力してください。RVM関連のプロジェクトはRVM Github organizationで見つけることができます。
スポンサー
Carbon Ads

Passenger 3でRVMのRubyを使用する

このページでは、Phusion Passenger 3 で RVM を使用する方法を説明します。Phusion Passenger 4 以降はRVMのサポートが大幅に改善されているため、アップグレードすることを強くお勧めします。Phusion Passenger 4 の手順については、こちらのページをご覧ください。

Passenger 3

Passengerは基本的にNginxとApache用の「mod_ruby」です。Passenger 3 アプリケーションをすべて実行するには、*正確に1つの* Rubyを選択する必要があります。複数の Ruby インタープリターを実行する必要がある場合は、最も一般的なものを選択してください。次に、プロキシパスを使用して、Passenger Standalone、Unicorn、Thin、Mongrel、Mongrel2などの外部アプリケーションサーバーに接続し、異なるRubyで異なるアプリケーションを実行できるようにします。これについての詳しい説明(図付き!)は、Phusionのブログの投稿をご覧ください。

Passengerを使用したNginx/Apacheのインストール

まず、passenger-install-apache2-moduleとpassenger-install-nginx-moduleがあります。インストールが完了すると、Webサーバー用のPassengerRuby設定スニペットが出力されます。その値は、インストーラーの実行に使用されたRVM RubyとRVM gemsetに対応するRVM Rubyラッパースクリプトに設定されます。これでPassenger 3の設定に必要なことはすべて完了です!

.rvmrcファイルを作成する代わりに、.ruby-versionまたは.versions.confのような新しい形式のいずれかを使用してください。

echo 1.9.3@my-app-name > .ruby-version

次に、railsプロジェクトで、新しいファイルconfig/setup_load_paths.rbを追加し、RVM 1.12.0(またはhead)以降、RVMはデフォルトのgemsetにgemとしてインストールされているため、$LOAD_PATHをunshiftする必要はありませんが、GEM_PATHを設定する必要があります。config/setup_load_paths.rb.

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    gems_path = ENV['MY_RUBY_HOME'].split(/@/)[0].sub(/rubies/,'gems')
    ENV['GEM_PATH'] = "#{gems_path}:#{gems_path}@global"
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    raise "RVM gem is currently unavailable."
  end
end

# If you're not using Bundler at all, remove lines bellow
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

Passenger 3 では、passenger_ruby ラッパーを使用する必要がなく、ruby ラッパー スクリプトを直接使用するようになったことに注意してください。

Passenger Standaloneの起動

次に、Passenger Standalone、つまり 'passenger start'があります。Passenger Standaloneは内部的にNginxを使用し、Nginx構成ファイルにpassenger_rubyディレクティブを書き込みます。このディレクティブは、「passenger start」コマンドの実行に使用されたRVM RubyとRVM gemsetに対応するRVM Rubyラッパースクリプトを指します。

Bundlerの落とし穴

プロジェクトでBundlerを使用すると、Passengerは賢く動作し、Gemfileにリストされているgemのみを$LOAD_PATHに追加しようとします。これにより、(これは開発中にのみ発生するはずですが)リストされていないgemの「ロードできない」エラーが発生する可能性があります。実行時のロードパスを確認するには、

f = File.open('/tmp/load_path', 'w')
f.write($:)
f.close

をアプリのメインファイル(「require」呼び出しの前)に追加してください。そのロードパスにないgemはロードできません。

トラブルシューティング

FAQ

これはRVM 1.12.0より前のバージョン用のconfig/setup_load_paths.rbです。

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    # $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    # RVM is unavailable at this point.
    raise "RVM ruby lib is currently unavailable."
  end
end

# Pick the lines for your version of Bundler
# If you're not using Bundler at all, remove all of them

# Require Bundler 1.0
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

# Require Bundler 0/9
# if File.exist?(".bundle/environment.rb")
#   require '.bundle/environment'
# else
#   require 'rubygems'
#   require 'bundler'
#   Bundler.setup
# end

コミュニティリソース