Если вы делаете
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 для поиска рубинов.
require "rubygems" делает вашу кодовую платформу зависимой:
- Кто-то может установить вашу библиотеку другим способом, чем rubygems
- В некоторых дистрибутивах Linux (например, Gentoo) нет необходимости требовать "rubygems"
В моих системах Debian я символически связываю каждую библиотеку rubygems с /usr/local/lib/site_ruby/1.8/, этот путь включен в стандартный путь поиска ($ :). Вы можете найти больше об этом в http://tomayko.com/writings/require-rubygems-antipattern.