我已通过rvm转移到ree:

rvm use ree@mygemset


并通过Gemfile和bundle install安装了kaminari gem。

但是Phusion乘客似乎仍然在系统默认目录中寻找gem。它说:

Error message:
    Could not find kaminari-0.10.4 in any of the sources (Bundler::GemNotFound)


我想念什么? Rails需要任何特定的配置来识别当前使用的红宝石版本和宝石集?

最佳答案

您需要指示乘客加载RVM,然后为您的gemset设置环境。最简单的方法包括三个步骤:


创建一个.rvmrc文件:在rails项目的根目录中,创建一个名为.rvmrc的文件,该文件包含用于加载gemset的RVM命令。例如:

rvm use ree@gemset

信任.rvmrc文件:将新的.rvmrc文件部署到服务器后,将目录更改为rails项目。 RVM应该询问您是否要信任您的.rvmrc文件。只需按照说明进行操作,并在询问时键入yes。如果没有出现提示,请使用以下命令信任您的.rvmrc

rvm rvmrc trust


注意:如果您希望自动信任所有.rvmrc,只需添加以下内容即可:

rvm_trust_rvmrcs_flag=1


到您的个人或系统范围内的rvmrc(分别为~/.rvmrc/etc/rvmrc)。
指示旅客设置RVM环境:通过在Rails的.rvmrc目录中创建一个名为config的新文件(因此全部为setup_load_paths.rb),指示旅客加载RVM并使用config/setup_load_paths.rb文件中的gemset。该文件应包含https://gist.github.com/870310的内容:

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
    raise "RVM ruby lib is currently unavailable."
  end
end

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


现在,当您重新启动应用程序(touch tmp/restart.txt)时,您应该会很好。


您应该注意,Passenger一次只能运行一个版本的Ruby。如果Passenger是在ree之外的其他环境下设置的,则可能必须重新安装Passenger和/或重做它生成的包装器脚本。

09-25 19:39