我用:
我安装了gem rake命令
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
为什么宝石'耙'的路径不添加?
答案 0 :(得分:2)
在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的lib
目录(Haml的依赖关系)和Haml添加到加载路径的开头。
对于某些宝石,例如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
提供第二个参数来指定特定的gem版本(这与Gemfiles
中使用的语法相同)。请注意,gem
方法不 require
任何文件,您必须单独执行此操作。