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
ylibiconv
: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 Windows x64:
gem inst nokogiri --pre --platform ruby
Para obtener más información, consulte este hilo: https://github.com/sparklemotion/nokogiri/issues/864
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.