我已经使用rvm转移到了ree:
rvm use ree@mygemset
并通过Gemfile和bundle install安装了kaminari gem。
但Phusion乘客似乎仍然在系统默认目录中寻找宝石。它说:
Error message:
Could not find kaminari-0.10.4 in any of the sources (Bundler::GemNotFound)
我错过了什么? Rails需要任何特定的配置来识别我正在使用的当前ruby版本和gemset吗?
答案 0 :(得分:30)
您需要指示Passenger加载RVM,然后为您的gemset设置环境。最简单的方法包括三个步骤:
创建.rvmrc
文件:在rails项目的根目录中,创建一个名为.rvmrc
的文件,其中包含用于加载的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中创建新文件,指示乘客加载RVM并使用.rvmrc
文件中的gemset {{ 1}}名为config
的目录(总共为setup_load_paths.rb
)。该文件应包含https://gist.github.com/870310:
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
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'
)时,您应该很高兴。
你应该注意到Passenger一次只能运行一个版本的Ruby;如果Passenger是在ree以外的地方设置的,你可能需要重新安装Passenger和/或重做它生成的包装脚本。
答案 1 :(得分: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/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'
问题解决了!
答案 2 :(得分:1)
我按照建议的答案,它让我前进,但后来我收到了一条错误消息:
RVM - Ruby集成被提取到一个单独的gem,默认情况下应该安装>使用RVM,删除
$LOAD_PATH.unshift
行,所有内容都应该没问题了。 有关详细信息,请访问https://rvm.io/integration/passenger。 (RuntimeError)
乘客现在拥有宝石。我的错误是没有将它安装在我正在使用的ruby版本和gemset中。一旦我做到了 - 一切都很好。
答案 3 :(得分:0)
删除Passenger 4的config/setup_load_paths.rb
文件。不需要。