[英]ruby adds no path to gems
我用:
我安裝了寶石耙命令
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.