1
我已经得到了需要的续集宝石的脚本:'require'<gem>''如何在没有捆绑器的情况下工作?
#!/usr/bin/env ruby
puts "BEFORE:", $LOAD_PATH.sort
require 'sequel'
puts "AFTER:", $LOAD_PATH.sort
puts self.method(:require).owner
我希望它不使用打捆创业板的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。)
只是做了一些测试与同时具有两种不同的版本安装了宝石的,在我的Gemfile指定一个较旧的使用需要有/无捆绑。因此,总结一下我所学到的知识:(1)ruby会自动搜索已安装的gem并添加它们的加载路径,默认为每个gem的最新安装版本,而(2)bundler将确保指定版本的路径在LOAD_PATH中是第一个,所以你得到正确的。那是对的吗? – odigity
Bundler主要更改'GEM_PATH',以便RubyGems可以查看由Bundler管理的路径,类似于RVM如何更改'PATH'以便shell将查找由RVM管理的路径。 –
我以为Bundler更改LOAD_PATH。当然是有的。更新:对GEM_PATH很好奇,所以我开始IRB并评估'ENV ['GEM_PATH']',并得到'nil'。然后我需要'bundler/setup'并再次评估,并得到空字符串('“”')。 – odigity