我相信我误解了bundler的工作方式,但从bundle install
documentation看来,这表明bundler会使用本地安装的系统宝石。Bundler安装已安装的gem
...
--system:安装到系统的位置($ BUNDLE_PATH或$ GEM_HOME),即使束先前安装在其他地方这种应用
...
--system选项是默认选项。如下所述,在使用--path选项后将其传递回去。
我没有使用rbenv/rvm或任何其他Ruby版本管理器。我使用ChefDK作为我的主要开发环境,它随附Ruby和一些预装的gem。
Gemfile的全部内容,还没有Gemfile.lock。
source 'https://rubygems.org'
gem 'nokogiri', '1.6.3.1'
本地引入nokogiri安装
$ gem list --local | grep nokogiri
nokogiri (1.6.6.2, 1.6.3.1, 1.5.5)
系统宝石的位置具有引入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
...
然而,当我运行一个安装包,它试图安装和编译的libxml2为引入nokogiri。
$ 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.
...
我在想什么?我如何强制bundler使用已安装的nokogiri 1.6.3.1(随ChefDK一起发布)?我试图避免让nokogiri编译libxml2,因为它在许多不同的开发/操作工作站上一直失败,并且导致无法结束。谢谢。
编辑
感谢蒂姆·摩尔,使用bundle env
我注意到在捆绑了共享宝石禁用输出。
$ 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'
...
看着~/.bundle/config
,果然全局配置已设置。
---
BUNDLE_DISABLE_SHARED_GEMS: '1'
一旦删除,Bundler正确解析nokogiri 1.6.3.1,并不尝试重新安装它。此设置不应默认设置,默认情况下,bundler将使用--system
进行安装。我必须在几个月前设置这个设置,并忘记我做了。
难道这是因为一些其他的宝石拉着不同版本的nokogiri作为依赖吗? – Almaron 2015-03-13 14:03:24
但Gemfile中只有一个gem。 – 2015-03-13 14:18:07
嗯..所以这是完整的Gemfile。那么,斯瑞不知道。 – Almaron 2015-03-13 14:24:13