Bundler安装已安装的gem

Art*_*son 2 ruby gem bundler chef-infra

我相信我误解了捆绑器的工作方式,但从bundle install 文档中可以看出捆绑器将使用本地安装的系统宝石.

...

--system:安装到系统位置($ BUNDLE_PATH或$ GEM_HOME),即使该软件包以前安装在此应用程序的其他位置

...

--system选项是默认选项.使用--path选项后,将其传递回切换,如下所述.

我没有使用rbenv/rvm或任何其他Ruby版本管理器.我使用ChefDK作为我的主要开发环境,它带有Ruby和一堆预装的宝石.

Gemfile的全部内容,还没有Gemfile.lock.

source 'https://rubygems.org'

gem 'nokogiri', '1.6.3.1'
Run Code Online (Sandbox Code Playgroud)

当地的nokogiri安装

$ gem list --local | grep nokogiri
nokogiri (1.6.6.2, 1.6.3.1, 1.5.5)
Run Code Online (Sandbox Code Playgroud)

System Gem位置安装了nokogiri 1.6.3.1

$ echo $GEM_HOME
/Users/arthur/.chefdk/gem/ruby/2.1.0
$ find /Users/arthur/.chefdk/gem/ruby/2.1.0 | grep nokogiri | grep 1.6.3.1
/Users/arthur/.chefdk/gem/ruby/2.1.0/cache/nokogiri-1.6.3.1.gem
/Users/arthur/.chefdk/gem/ruby/2.1.0/extensions/x86_64-darwin-12/2.1.0/nokogiri-1.6.3.1
/Users/arthur/.chefdk/gem/ruby/2.1.0/extensions/x86_64-darwin-12/2.1.0/nokogiri-1.6.3.1/mkmf.log
/Users/arthur/.chefdk/gem/ruby/2.1.0/gems/nokogiri-1.6.3.1
/Users/arthur/.chefdk/gem/ruby/2.1.0/gems/nokogiri-1.6.3.1/.autotest
/Users/arthur/.chefdk/gem/ruby/2.1.0/gems/nokogiri-1.6.3.1/.editorconfig
...
Run Code Online (Sandbox Code Playgroud)

但是,当我运行bundle install时,它会尝试为nokogiri安装和编译libxml2.

$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using mini_portile 0.6.0
Building nokogiri using packaged libraries.
Building libxml2-2.8.0 for nokogiri with the following patches applied:
  - 0001-Fix-parser-local-buffers-size-problems.patch
  - 0002-Fix-entities-local-buffers-size-problems.patch
  - 0003-Fix-an-error-in-previous-commit.patch
  - 0004-Fix-potential-out-of-bound-access.patch
  - 0005-Detect-excessive-entities-expansion-upon-replacement.patch
  - 0006-Do-not-fetch-external-parsed-entities.patch
  - 0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch
  - 0008-Improve-handling-of-xmlStopParser.patch
  - 0009-Fix-a-couple-of-return-without-value.patch
  - 0010-Keep-non-significant-blanks-node-in-HTML-parser.patch
  - 0011-Do-not-fetch-external-parameter-entities.patch
************************************************************************
IMPORTANT!  Nokogiri builds and uses a packaged version of libxml2.
...
Run Code Online (Sandbox Code Playgroud)

我错过了什么?如何强制捆绑器使用已安装的nokogiri 1.6.3.1(与ChefDK一起提供)?我试图避免让nokogiri编译libxml2因为它在许多不同的开发人员/操作工作站上一直失败并且没有引起悲伤.谢谢.

编辑

感谢Tim Moore,使用bundle env我在输出中注意到bundler已经禁用了共享gems.

$ bundle env
Bundler 1.7.12
Ruby 2.1.4 (2014-10-27 patchlevel 265) [x86_64-darwin12.0]
Rubygems 2.4.4
GEM_HOME /Users/arthur/.chefdk/gem/ruby/2.1.0
GEM_PATH /Users/arthur/.chefdk/gem/ruby/2.1.0:/opt/chefdk/embedded/lib/ruby/gems/2.1.0

Bundler settings
  disable_shared_gems
    Set for the current user (/Users/arthur/.bundle/config): "1"


Gemfile
source 'https://rubygems.org'
...
Run Code Online (Sandbox Code Playgroud)

看看~/.bundle/config,确定全局配置已经设置好了.

---
BUNDLE_DISABLE_SHARED_GEMS: '1'
Run Code Online (Sandbox Code Playgroud)

一旦删除,Bundler正确解析nokogiri 1.6.3.1并且不尝试重新安装它.默认情况下,默认情况下,此设置不应存在--system.我必须在几个月前设置这个设置,忘了我做了.

Tim*_*ore 6

尝试运行bundle env以验证安装位置是否符合预期.

如果没有,请检查是否有覆盖安装路径的文件.bundle/config~/.bundle/config文件.输出bundle env将告诉您它正在使用什么配置以及如何确定它(即它所在的文件或是否从环境变量中获取).