如果你这样做
require "httparty"
ruby 在不同的位置搜索 httparty.rb 或 httparty.so。ruby 搜索的位置以及存储在全局变量 $ 中的顺序:
在我的 debian 系统上,它看起来像这样:
$: # => ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/x86_64-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/x86_64-linux", "."]
但是httparty.rb在/var/lib/gems/1.8/gems/httparty-0.4.5/lib/httparty.rb,所以找不到。当你这样做
require "rubygems"
更改了 Kernel#require 方法,以查找 rubygems。
require "rubygems" 使您的代码依赖于平台:
- 有人可能会通过 rubygems 以外的其他方法安装您的库
- 一些 linux 发行版(例如 gentoo)使得不需要“rubygems”
在我的 debian 系统上,我将每个 rubygems 库符号链接到 /usr/local/lib/site_ruby/1.8/,此路径包含在标准搜索路径 ($:) 中。您可以在http://tomayko.com/writings/require-rubygems-antipattern找到更多相关信息。