`require'<gem>'如何在没有捆绑器的情况下工作?

时间:2015-10-05 12:02:29

标签: ruby

我有一个需要续集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。)

1 个答案:

答案 0 :(得分:2)

这是由RubyGems处理的,与Bundler无关。