乘客上的Rails无法识别RVM

我已经转向使用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需要任何特定的配置来识别我正在使用的当前ruby版本和gemset?

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

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

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

     rvm rvmrc trust 

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

     rvm_trust_rvmrcs_flag=1 

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

  3. 指示乘客设置RVM环境 :通过在Rails config目录中创建一个名为setup_load_paths.rb的新文件(所有config/setup_load_paths.rb ),指示乘客加载RVM并在.rvmrc文件中使用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和/或重做它生成的包装脚本。

只是对Marked (Broandon)答案的第3步的补充说明,因为我没有通过使用这些代码获得我的Passenger3并运行。

错误消息如下:

 *** Phusion Passenger: no passenger_native_support.bundle found for the current Ruby interpreter. Compiling one... # mkdir -p /Users/jerry/.rvm/gems/ruby-1.9.3-p194@xxx/gems/passenger-3.0.18/ext/ruby/ruby-1.9.3-x86_64-macosx # cd /Users/jerry/.rvm/gems/ruby-1.9.3-p194@xxx/gems/passenger-3.0.18/ext/ruby/ruby-1.9.3-x86_64-macosx Unable to locate the RVM path. Your RVM installation is probably too old. Please update it with 'rvm get head && rvm reload && rvm repair all'. 

参考消息“无法找到RVM路径”,我检查了RVM文档https://rvm.io/integration/passenger/

将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' 

问题解决了!

我按照建议的答案,它让我前进,但后来我收到一条错误信息:

RVM – Ruby集成被提取到一个单独的gem,它应该默认安装>使用RVM,删除$LOAD_PATH.unshift行,所有应该再次正常。 访问https://rvm.io/integration/passenger了解更多详情。 (RuntimeError)

乘客现在有一颗gem。 我的错误是没有将它安装在我正在使用的ruby版本和gemset中。 一旦我做到了 – 一切都很好。

删除Passenger 4的config/setup_load_paths.rb文件。不需要。