我有一个需要续集gem的脚本:
#!/usr/bin/env ruby
puts "BEFORE:", $LOAD_PATH.sort
require 'sequel'
puts "AFTER:", $LOAD_PATH.sort
puts self.method(:require).owner
我预计它会在没有使用bundler将gem的lib目录添加到加载路径时失败,但它成功了!
在输出中,您可以清楚地看到路径是通过以下内容添加的:
BEFORE:
/usr/local/lib/ruby/2.2.0
/usr/local/lib/ruby/2.2.0/x86_64-linux
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/site_ruby/2.2.0
/usr/local/lib/ruby/site_ruby/2.2.0/x86_64-linux
/usr/local/lib/ruby/vendor_ruby
/usr/local/lib/ruby/vendor_ruby/2.2.0
/usr/local/lib/ruby/vendor_ruby/2.2.0/x86_64-linux
AFTER:
/usr/local/bundle/gems/sequel-4.26.0/lib
/usr/local/lib/ruby/2.2.0
/usr/local/lib/ruby/2.2.0/x86_64-linux
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/site_ruby/2.2.0
/usr/local/lib/ruby/site_ruby/2.2.0/x86_64-linux
/usr/local/lib/ruby/vendor_ruby
/usr/local/lib/ruby/vendor_ruby/2.2.0
/usr/local/lib/ruby/vendor_ruby/2.2.0/x86_64-linux
Kernel
我甚至检查了方法所有者,看看require
是否正在解析Ruby内置的Kernel::require
方法以外的其他方法,但它显然来自Kernel
。
这里发生了什么?
(使用Ruby 2.2.3。)
答案 0 :(得分:2)
这是由RubyGems处理的,与Bundler无关。