son rails que las guides gems gemas ejemplos ruby-on-rails ruby rubygems

ruby-on-rails - rails - ruby gems



La instalaciĆ³n de Nokogiri falla, falta el archivo libxml2 (19)

¿Has intentado instalar libxml2? No de rubygems, sino a través del proceso de instalación estándar para su sistema operativo. En Ubuntu / Debian por ejemplo:

sudo apt-get install libxml2

En cualquier versión reciente de OS X ya debería estar instalado.

Siempre trabajé para solucionar los problemas de instalación de Nokogiri siguiendo la documentación en el tutorial " Instalar Nokogiri ".

Pero esta vez, incluso después de instalar todas las dependencias, Nokogiri no se ha instalado. Obtuve el siguiente error:

libxml2 is missing. please visit <http://nokogiri.org/tutorials/installing_nokogiri.html>

Intenté instalarlo especificando los directorios libxml2 y libxslt:

sudo gem install nokogiri -- --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/

pero devolvió el mismo error.

Seguí todos los demás artículos relacionados con Desbordamiento de pila y ninguno me ayudó. ¿Alguien tiene una solución?


=== TLDR ===

Como lo indican las instrucciones , cree Ruby con el último compilador clang, o al menos la misma versión que utilizará Rubygems para compilar las extensiones nativas de Nokogiri libxml y libxsl.

Si utilizo RVM, construir desde la fuente con la bandera --with-ggc=clang fue lo que hizo por mí:

rvm install 2.2 --with-gcc=clang

Reemplace 2.2 con la versión que desee. --with-gcc=clang asegura construcciones RVM desde la fuente y utiliza clang para hacerlo; de lo contrario, RVM puede ser un Ruby binario preconstruido, que es lo que me hizo tropezar.

Luego, instale Nokogiri normalmente usando Bundler o Rubygems.

=== EN PROFUNDIDAD ===

Luché con esto por un tiempo. gem install nokogiri me dio:

checking for xmlParseDoc() in libxml/parser.h... no checking for xmlParseDoc() in -lxml2... no checking for xmlParseDoc() in -llibxml2... no

Buscando en mkmf.log vi:

conftest.c:15:27: error: too few arguments to function call, single argument ''cur'' was not specified int t(void) { xmlParseDoc(); return 0; }

Nokogiri proporciona su propio libxml y libxsl (a partir de 1.6.4). La firma definida en la copia local de Nokogiri de parser.h (que se encuentra debajo del directorio de instalación de gem) es:

xmlParseDoc (const xmlChar *cur);

Por lo tanto, no sabía cómo utilizar el método en el archivo comprimido herméticamente sellado. El uso del archivo .c no coincidía con el archivo de cabecera para el analizador.h.

Cuando me di cuenta de que probablemente había instalado un Ruby binario que eliminé y reinstalé usando --with-gcc=clang (para forzar la compilación y uso clang) y el problema fue resuelto:

rvm uninstall 2.2 rvm install 2.2 --with-gcc=clang gem install nokogiri

No estoy exactamente seguro de por qué funciona, ya que el sistema encabezado libxml /usr/include/libxml2/libxml/parser.h tiene la misma firma que la copia local de Nokogiri.

Es extraño, pero funcionó. Solo asegúrate de compilar un Ruby con clang.


Acabo de tener el mismo problema en Fedora 13. Después de una búsqueda frustrante y sin éxito para hacer

gem install nokogiri

trabajo para mí, pude instalarlo y solucionar el error libxml2 a través de yum .

Simplemente instala la gema a través de yum lugar del comando gem :

su yum search rubygem-nokogiri #this find the proper package name yum install rubygem-nokogiri.i686

Esto me ayudó a encontrar la respuesta correcta para Fedora y, como estoy usando RVM para la administración de paquetes de Ruby,

yum install rubygem-nokogiri

incluirá todas las gemas y dependencias de Ruby en el sistema, no en mi entorno RVM, y en mi experiencia eso conduce a una experiencia muy frustrante y humillante.

Por lo tanto, tomando su hallazgo de la gema Nokogiri yum puede usar:

yum provides rubygem-nokogiri

y obtener una lista de las dependencias para rubygem-Nokogiri que me mostró las bibliotecas que faltaban. Después de eso corrí:

yum install libxml2-devel libxslt libxslt-devel

Ahora Nokogiri compila en las instalaciones de Fedora y Nokogiri. D''oh !, necesitamos los encabezados para compilar Nokogiri de las bibliotecas de desarrollo.


En Mac OS X (Mavericks) si ninguna de estas soluciones funciona, intente:

ARCHFLAGS="-arch x86_64" gem install nokogiri

o

ARCHFLAGS="-arch i386" gem install nokogiri

dependiendo de la arquitectura de tu sistema


En Mac OS X (Mavericks), instalar las bibliotecas con brew y configurar NOKOGIRI_USE_SYSTEM_LIBRARIES=1 antes de instalar la gema me sirvió de algo.

Resumiendo:

  • Si se instaló previamente, desinstala la gema:

    gem uninstall nokogiri

  • Use Homebrew para instalar libxml2 , libxslt y libiconv :

    brew install libxml2 libxslt libiconv

  • Instale la gema especificando las rutas a las bibliotecas a las que se va a vincular:

    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"


En Mac OS X Yosemite, mi error fue que intenté usar sudo gem install cuando es una regla de oro no usar privilegios de superusuario al instalar gems.

En mi caso, intentó modificar la instalación del sistema de Ruby, y esa no es una buena idea. Instalé rbenv, instalé Ruby 2.2.2 en él y lo configuré como global , que es un término de la documentación de rbenv. Después de eso Nokogiri podría instalarse con un simple

gem install nokogiri

No se necesitaban hacks ni soluciones alternativas, solo un entorno adecuadamente establecido; Nokogiri hace el resto perfectamente.


En macOS, ninguna de las anteriores / inferiores me había funcionado realmente hasta que proporcioné explícitamente la ruta XCode libxml2 a --with-xml2-include .

gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries


Es posible que necesite instalar ambos paquetes

sudo apt-get install libxslt-dev libxml2-dev



Para cualquier otra persona que experimente este problema, lo resolví ejecutando este comando dentro del directorio del proyecto

gem install nokogiri -- --use-system-libraries

Actualización: me encontré con esto de nuevo e intenté actualizar la gema que funcionó para mí ...

gem update nokogiri


Para los usuarios de OSX, si has tenido éxito instalando Nokogiri antes, aún tienes errores al instalarlo, digamos, usando una nueva versión de Ruby que has agregado y ese error que incluye un mensaje como:

The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first.

Esto podría ser indicativo de que se ha producido una actualización de XCode a través de App Store, ya sea de forma manual o automática, y que no la haya abierto desde ese momento.

Si es así, debería poder abrir XCode, aceptar la nueva licencia y luego instalar Nokogiri con éxito.


Por lo general, necesitas archivos de desarrollo para construir gemas. Tratar:

sudo apt-get install libxslt-dev libxml2-dev

(Acabo de ver que Eric sugirió lo mismo en un comentario).


Primero, instale las dependencias:

sudo apt-get install libxslt-dev libxml2-dev

Si aún recibes el error, es posible que te falte una cadena de herramientas del compilador:

sudo apt-get install build-essential

Obtendrá el error "libxml2 is missing" si le falta una cadena de herramientas de compilación (al menos me encontré con este problema en Debian Lenny).

La prueba de compilación Nokogiri compila un archivo de encabezado libxml2 para verificar que está presente, sin embargo, no distingue entre "falta libxml2" y "falta un compilador para probar libxml2".


Pude instalar Nokogiri 1.6.5 en Fedora 20 haciendo:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Luego corriendo:

gem install nokogiri


Pude instalar Nokogiri ejecutando los siguientes paquetes:

$ dnf group install "C Development Tools and Libraries" $ dnf install ruby-devel libxml2-devel patch


Pude instalar esto con Chocolatey , Windows 8.1 x64 y DevKit x64.

cinst libxml2 cinst libxslt cinst libiconv gem install nokogiri -- --with-xml2-include=C:/Chocolatey/lib/libxml2.2.7.8.7/build/native/include --with-xml2-lib=C:/Chocolatey/lib/libxml2.redist.2.7.8.7/build/native/bin/v110/x64/Release/dynamic/cdecl --with-iconv-include=C:/Chocolatey/lib/libiconv.1.14.0.11/build/native/include --with-iconv-lib=C:/Chocolatey/lib/libiconv.redist.1.14.0.11/build/native/bin/v110/x64/Release/dynamic/cdecl --with-xslt-include=C:/Chocolatey/lib/libxslt.1.1.28.0/build/native/include --with-xslt-lib=C:/Chocolatey/lib/libxslt.redist.1.1.28.0/build/native/bin/v110/x64/Release/dynamic

Deberá verificar que el número de versión en las rutas sea correcto.

Posiblemente necesite agregar el repositorio NuGet de Microsoft:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"


Pudo instalar vagabundo respetuoso siguiendo la publicación anterior pero usando el comando de la siguiente manera:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws


Será:

sudo yum install -y libxml2 libxml2-devel

en servidores RHEL.


gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

Cambia tu versión con eso.