[英]Rails on Passenger not recognizing 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設置環境。 最簡單的方法包括三個步驟:
創建.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 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)
乘客現在有一顆寶石。 我的錯誤是沒有將它安裝在我正在使用的ruby版本和gemset中。 一旦我做到了 - 一切都很好。
刪除Passenger 4的config/setup_load_paths.rb
文件。不需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.