2011-03-15 55 views
14

我已经转向使用RVM通过对稀土元素:Rails的不承认RVM

rvm use [email protected] 

,并通过安装的Gemfile宝石雷和捆绑安装。

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

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

我缺少什么? Rails需要任何特定的配置来识别当前使用的ruby版本和gemset?

+0

这不是在您的默认系统目录中。它正在寻找捆绑商寻找的来源中的宝石。再看看你的Gemfile。另外,你是如何安装你的kaminari宝石?宝石列表说什么? – corroded 2011-03-15 04:19:49

+0

什么是您的乘客版本?如何安装它? (独立或与另一个Web服务器在它之前,如果是这样的?apache或nginx) – Brandon 2011-03-15 04:21:05

回答

31

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

  1. 创建.rvmrc文件:在Rails项目的根,创建一个名为.rvmrc文件,其中包含你将用来装载了RVM命令你宝石。例如:

    rvm use [email protected] 
    
  2. 信托.rvmrc文件:一旦你部署新.rvmrc文件到您的服务器,将目录切换到您的轨道项目。 RVM应询问您是否要信任您的.rvmrc文件;只需按照说明进行操作,并在询问时键入yes。如果没有出现提示,请使用以下命令来信任你.rvmrc

    rvm rvmrc trust 
    

    注意:如果你想自动信任所有.rvmrc S,它是将一个简单的问题:

    rvm_trust_rvmrcs_flag=1 
    

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

  3. 指示乘客来设置RVM环境:指导乘客加载RVM并在Rails创建一个新文件config目录名为setup_load_paths.rb(在所有所以config/setup_load_paths.rb)使用宝石在你.rvmrc文件。当您重新启动应用程序(touch tmp/restart.txt),你应该是好去

    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' 
    

    现在:该文件应包含https://gist.github.com/870310内容。

您应该注意,Passenger一次只能运行一个Ruby版本;如果Passenger是在ree之外设置的,你可能需要重新安装Passenger和/或重做它生成的包装器脚本。

+1

谢谢。这绝对解决了这个问题。 – lkahtz 2011-03-16 03:43:11

+0

在我的特殊设置中,我必须在“bundle install”之前在控制台中运行“rvm use ree @ gemset”,因为.rvm文件在进入shell目录时未执行。 – tomaszbak 2012-05-15 15:14:53

+1

以上是真实的,包括乘客版本3.乘客4允许多个红宝石版本:[Apache](http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerRuby)&[Nginx] (http://www.modrails.com/documentation/Users%20guide%20Nginx.html#PassengerRuby) – Spiralis 2013-04-28 22:33:17

2

标记为(Broandon's)的回答仅仅是第3步的补充说明,因为我没有使用我的Passenger3并使用这些代码运行。

错误消息是如下:

*** Phusion Passenger: no passenger_native_support.bundle found for the current Ruby interpreter. Compiling one... 
# mkdir -p /Users/jerry/.rvm/gems/[email protected]/gems/passenger-3.0.18/ext/ruby/ruby-1.9.3-x86_64-macosx 
# cd /Users/jerry/.rvm/gems/[email protected]/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/

编辑配置/ 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' 

问题解决!

1

我跟着建议的答案,它向前移动了我,但后来我得到一个错误信息:

RVM - 红宝石集成提取到一个单独的宝石,它应该被默认安装>与RVM,删除$LOAD_PATH.unshift行和所有应该罚款。 访问https://rvm.io/integration/passenger了解更多详情。 (RuntimeError)

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

0

删除乘客4的config/setup_load_paths.rb文件。它不是必需的。