usage rails parse method ruby gem nokogiri libxml2

ruby - rails - Error al instalar nokogiri 1.6.0 en mac(libxml2)



nokogiri usage (2)

ACTUALIZACIÓN: arreglado

Encontré la respuesta en otro hilo. La solución alternativa que utilicé es decirle a Nokogiri que use las bibliotecas del sistema en su lugar:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install

====

Intentando instalar nokogiri 1.6.0 en un mac. Con versiones anteriores, no tuve problemas. Pero 1.6.0 se niega a instalar. Este es el error:

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 <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/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

Parece que tiene algo que ver con el archivo tar libxml2 que no puede extraer.

¿Algunas ideas? He hecho quizás 8 horas de investigación en vano. ¡Gracias!


Encontré la respuesta en otro hilo. La solución alternativa que utilicé es decirle a Nokogiri que use las bibliotecas del sistema en su lugar:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install


Crea el archivo build_nokogiri (o lo que sea) y completa con:

#!/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

Dale permiso a este archivo para que se ejecute.

Ejecutar archivo.

Esto resolverá automáticamente las dependencias instaladas usando brew.