在mac(libxml2)上安装nokogiri 1.6.0时出错

更新:已修复

我在另一个post中找到了答案。 我使用的解决方法是告诉Nokogiri使用系统库:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 

====

试图在Mac上安装nokogiri 1.6.0。 在以前的版本中,我没有遇到任何问题。 但1.6.0拒绝安装。 这是错误:

  Building native extensions. This could take a while... ERROR: Error installing nokogiri: ERROR: Failed to build gem native extension. /Users/josenriq/.rvm/rubies/ruby-1.9.3-head/bin/ruby extconf.rb Extracting libxml2-2.8.0.tar.gz into tmp/i686-apple-darwin11/ports/libxml2/2.8.0... ERROR tar: This does not look like a tar archive tar: Skipping to next header tar: Archive contains obsolescent base-64 headers tar: Read 3 bytes from /Users/josenriq/.rvm/gems/ruby-1.9.3-head@wdi/gems/nokogiri-1.6.0/ports/archives/libxml2-2.8.0.tar.gz tar: Error exit delayed from previous errors *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/Users/josenriq/.rvm/rubies/ruby-1.9.3-head/bin/ruby /Users/josenriq/.rvm/rubies/ruby-1.9.3-head/lib/ruby/gems/1.9.1/gems/mini_portile-0.5.1/lib/mini_portile.rb:234:in `extract_file': Failed to complete extract task (RuntimeError) from /Users/josenriq/.rvm/rubies/ruby-1.9.3-head/lib/ruby/gems/1.9.1/gems/mini_portile-0.5.1/lib/mini_portile.rb:34:in `block in extract' from /Users/josenriq/.rvm/rubies/ruby-1.9.3-head/lib/ruby/gems/1.9.1/gems/mini_portile-0.5.1/lib/mini_portile.rb:32:in `each' from /Users/josenriq/.rvm/rubies/ruby-1.9.3-head/lib/ruby/gems/1.9.1/gems/mini_portile-0.5.1/lib/mini_portile.rb:32:in `extract' from /Users/josenriq/.rvm/rubies/ruby-1.9.3-head/lib/ruby/gems/1.9.1/gems/mini_portile-0.5.1/lib/mini_portile.rb:98:in `cook' from extconf.rb:101:in `block in ' from extconf.rb:119:in `call' from extconf.rb:119:in `block in ' from extconf.rb:109:in `tap' from extconf.rb:109:in `' Gem files will remain installed in /Users/josenriq/.rvm/gems/ruby-1.9.3-head@wdi/gems/nokogiri-1.6.0 for inspection. Results logged to /Users/josenriq/.rvm/gems/ruby-1.9.3-head@wdi/gems/nokogiri-1.6.0/ext/nokogiri/gem_make.out 

好像它与libxml2 tar文件无法解压缩有关。

有任何想法吗? 我做了大概8个小时的研究无济于事。 谢谢!

我在另一个post中找到了答案。 我使用的解决方法是告诉Nokogiri使用系统库:

 NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 

创建文件build_nokogiri(或其他)并填写:

 #!/usr/bin/env ruby class Version attr_reader :major, :minor, :patch, :base def initialize( str ) @base = str base = File.basename str @major, @minor, @patch = base.split('.').map &:to_i end def <=>(other) return -1 if major < other.major return 1 if major > other.mahor return -1 if minor < other.minor return 1 if minor > other.minor return -1 if patch < other.patch return 1 if patch > other.patch 0 end def to_s "##{self.class.name}{#@major #@minor #@patch #@base}" end alias inspect to_s alias dir base def version [major,minor,patch].compact.join('.') end end class Lookup < Version class << self attr_accessor :prefix end def self.find Dir[ "/usr/local/Cellar/#{ full_name }/*" ].map { |c| new c }.sort.first end def self.full_name [prefix, name.downcase].compact.join('') end %w{ include lib }.each { |m| define_method("#{m}_path") { "#{ base }/#{ m }" } } def args %w{ include lib }.map do |c| "--with-#{ self.class.name.downcase }-#{c}=#{ send("#{ c }_path") }" end.join(' ') end end class XML2 < Lookup self.prefix = 'lib' def include_path "#{super}/#{ self.class.full_name }" end end class XSLT < Lookup self.prefix = 'lib' def args "--with-xslt-dir=#{ dir }" end end class Iconv < Lookup self.prefix = 'lib' end puts "Found:" a = [ XML2.find, XSLT.find, Iconv.find ] puts a s=" gem install nokogiri -- #{ a.map(&:args).join(' ') } --use-system-libraries" puts s exec s 

授予此文件执行权限。

执行文件。

这将自动解决使用brew安装的依赖项。