簡體   English   中英

乘客上的Rails無法識別RVM

[英]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設置環境。 最簡單的方法包括三個步驟:

  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)

乘客現在有一顆寶石。 我的錯誤是沒有將它安裝在我正在使用的ruby版本和gemset中。 一旦我做到了 - 一切都很好。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM