2013-07-25 43 views
22

更新:修正錯誤的MAC(libxml2的)安裝引入nokogiri 1.6.0

我發現在另一個線程的答案。我使用的解決方法是告訴引入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/[email protected]/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 <main>' 
    from extconf.rb:119:in `call' 
    from extconf.rb:119:in `block in <main>' 
    from extconf.rb:109:in `tap' 
    from extconf.rb:109:in `<main>' 


Gem files will remain installed in /Users/josenriq/.rvm/gems/[email protected]/gems/nokogiri-1.6.0 for inspection. 
Results logged to /Users/josenriq/.rvm/gems/[email protected]/gems/nokogiri-1.6.0/ext/nokogiri/gem_make.out 

似乎它與libxml2 tar文件無法提取有關。

任何想法?我做了8個小時的研究,但無濟於事。謝謝!

回答

35

我在另一個線程中找到了答案。我使用的解決方法是告訴引入nokogiri使用系統庫,而不是:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 
+1

這也適用於我的OpenBSD 5.3機器! –

+0

能用osx 10.6.8 ruby​​2.1.0升級到nokogiri 1.6.1使用這個答案。 – AGS

+0

不適合我。 –

0

創建文件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安裝的依賴關係。

相關問題