簡體   English   中英

紅寶石沒有寶石的路徑

[英]ruby adds no path to gems

我用:

  1. rvm 1.25.19(穩定)
  2. 紅寶石1.9.3p545

我安裝了寶石耙命令

gem install rake

我了解$ LOAD_PATH應該包含路徑:

~/.rvm/rubies/ruby1.9/gems/rake/lib
~/.rvm/rubies/ruby1.9/gems/rake/bin

我執行命令:

ruby -e 'puts $LOAD_PATH'

輸出:

/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/site_ruby/1.9.1
/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/site_ruby/1.9.1/x86_64-linux
/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/site_ruby
/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/vendor_ruby/1.9.1
/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/vendor_ruby/1.9.1/x86_64-linux
/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/vendor_ruby
/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1
/home/slip/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/x86_64-linux

為什么沒有添加寶石“耙”的路徑?

在Ruby中安裝gem不會自動將該gem的文件添加到加載路徑。 當您require一個文件時,首先搜索現有的加載路徑,如果找不到匹配的文件,則Rubygems會在已安裝的gems中搜索該文件。 如果找到了這樣的gem,那么它將被激活 ,這是將gem的lib目錄添加到加載路徑時。

這是使用Haml gem的示例:

puts "Before:"
puts $LOAD_PATH
puts

require 'haml'
puts "After:"
puts $LOAD_PATH

這將產生:

Before:
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/vendor_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/vendor_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/x86_64-darwin10.8.0

After:
/Users/matt/.rvm/gems/ruby-1.9.3-p448/gems/tilt-1.4.1/lib
/Users/matt/.rvm/gems/ruby-1.9.3-p448/gems/haml-4.0.5/lib
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/vendor_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/vendor_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/x86_64-darwin10.8.0

了解如何將Tilt(與Haml相關的文件)和Haml的lib目錄添加到加載路徑的開頭。

對於某些寶石(例如Rake),由於它們是標准庫的一部分並且已經在加載路徑中,因此使情況變得復雜。 如果您將上面的示例更改為使用require 'rake'那么加載路徑中將看不到任何更改。 在這種情況下,您可以指定要使用gem版本的gem方法。 這將激活有問題的gem,將其lib目錄放置在加載路徑的開始處,以便以后調用時require加載正確的版本。

例如,此腳本

require 'rake'
puts Rake::VERSION

用Ruby 1.9.3生成0.9.2.2 ,因為它是標准庫中包含的Rake的版本。 但是此腳本:

gem 'rake'
require 'rake'
puts Rake::VERSION

產生10.1.1 ,因為這是我系統上安裝的Rake gem的當前最高版本。 您也可以通過提供第二個參數指定一個特定的寶石版本gem (這是因為在使用相同的語法Gemfiles )。 需要注意的是gem的方法並不 require任何文件,你需要做的,作為一個單獨的步驟。

暫無
暫無

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

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