サポート
RVMはボランティアのコミュニティによってメンテナンスされています。問題はRVM issue trackerに報告してください。
もしあなたが手伝ってくれる、あるいはメンテナーの一員になりたいと思うなら、ぜひ協力してください。RVM Github organizationでRVM関連のプロジェクトを見つけることができます。
スポンサー
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 インタプリタを実行する必要がある場合は、最も一般的なものを選択する必要があります。その後、異なる Ruby で異なるアプリケーションを実行するために、Passenger Standalone、Unicorn、Thin、Mongrel、Mongrel2 などの外部アプリケーションサーバーへのプロキシパスを使用します。これについての完全な説明(美しい画像付き!)については、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で「unable to load」エラーが発生する可能性があります(これは開発中にのみ発生するはずです)。実行時のロードパスを確認するには、次を追加します。

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

コミュニティリソース