乘客上的Rails无法识别RVM

lka*_*htz 14 ruby-on-rails passenger rvm

我已经转向使用rvm ree:

rvm use ree@mygemset
Run Code Online (Sandbox Code Playgroud)

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

但Phusion乘客似乎仍在系统默认目录中查找gem.它说:

Error message:
    Could not find kaminari-0.10.4 in any of the sources (Bundler::GemNotFound)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?Rails需要任何特定的配置来识别我正在使用的当前ruby版本和gemset?

Mic*_*ley 30

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

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

    rvm use ree@gemset
    
    Run Code Online (Sandbox Code Playgroud)
  2. 信任.rvmrc文件:将新.rvmrc文件部署到服务器后,将目录更改为rails项目.RVM应该询问您是否要信任您的.rvmrc文件; 只需按照说明操作并yes在询问时输入.如果未出现提示,请使用以下命令信任您的.rvmrc:

    rvm rvmrc trust
    
    Run Code Online (Sandbox Code Playgroud)

    注意:如果您希望自动信任所有.rvmrcs,则添加以下内容非常简单:

    rvm_trust_rvmrcs_flag=1
    
    Run Code Online (Sandbox Code Playgroud)

    到你的个人或系统范围的rvmrc(~/.rvmrc/etc/rvmrc分别).

  3. 指导乘客设置RVM环境:.rvmrc通过在Rails config目录中创建一个名为setup_load_paths.rb(config/setup_load_paths.rb所有)的新文件,指示乘客加载RVM并在文件中使用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'
    
    Run Code Online (Sandbox Code Playgroud)

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

您应该注意到Passenger一次只能运行一个版本的Ruby; 如果Passenger是在ree以外的其他地方设置的,则可能需要重新安装Passenger和/或重做它生成的包装脚本.