He hecho todo tipo de investigaciones y he probado muchas cosas diferentes. Sé que esta pregunta ha sido respondida muchas veces, pero ninguna de las soluciones sugeridas me funciona.
Después de actualizar a Lion, recibo fallas de segmentación en Ruby. Estoy bastante seguro de que es Nokogiri. Así que instalé libxml2 a través de Homebrew. Yo corrí brew link libxml2
. Luego reinstalé Nokogiri usando esa versión de la biblioteca.
Como prueba:
$ nokogiri -v
# Nokogiri (1.5.0)
---
warnings: []
nokogiri: 1.5.0
ruby:
version: 1.9.2
platform: x86_64-darwin11.0.0
description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
engine: ruby
libxml:
binding: extension
compiled: 2.7.8
loaded: 2.7.8
Ya he incluido Nokogiri en la parte superior de mi archivo de gemas y también lo he requerido en mi archivo de entorno. No tengo idea de por qué sigo recibiendo esa advertencia.
¿Alguna sugerencia o idea para asegurarse de que está cargando la versión correcta libxml2?
brew remove --force libxml2
bundle config --delete build.nokogiri
gem uninstall nokogiri libxml-ruby
bundle
1.6.2.1
yUbuntu 12.04
no juegues bien. Volviendo a1.6.1
arreglarlo después de probar todas las demás soluciones que pude encontrar.Respuestas:
Pasé la mayor parte de la mañana trabajando en esta advertencia. Esta solución es para personas que usan Mac OS Lion. La corrección anterior usando
bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
es para Snow Leopard con libxml2 instalado a través de MacPorts.
Con Lion, libxml2 se carga como parte del proceso de arranque. Independientemente de a qué libxml2 Nokogiri esté apuntando, la biblioteca predeterminada del sistema Lion para libxml2 se utilizará en tiempo de ejecución. Lion usa libxml2.2.7.3 que se encuentra en
/usr
(not/usr/local
).Como se mencionó en muchos otros lugares, uno puede simplemente ignorar la advertencia. Si, como yo, la advertencia te vuelve loco, puedes hacer esto:
Curiosamente, si escribe
nokogiri -v
en la línea de comando, obtendrá la advertencia opuesta:WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8
Esto sugiere que hay más sobre cómo se carga libxml2, con Ruby y Rails usando el sistema cargado libxml2 y la línea de comando usando libxml2 desde la ruta del entorno. De todos modos, esto silencia el error para mí.
Lo diré de nuevo, esto es solo para Lion. La solución anterior funcionará para Snow Leopard.
Este es el final de la respuesta. Deja de leer aquí.
OK, no dejaste de leer ... bueno ...
¡¡¡¡¡¡NO RECOMENDADO!!!!!!
Usted ha sido advertido. Puede verificar que Mac OSX esté cargando la biblioteca libxml2 en su bootstrap deshabilitando libxml2 que se encuentra en
/usr/lib
. Haga algo como copiar todas las versiones delibxml2*.dylib
tolibxml2*.dylib.old
(en mi máquina esto eralibxml2.2.7.3
,libxml2.2
ylibxml2
).Una vez hecho esto, la ejecución de Nokogiri no producirá ningún error. Esto se debe a que no puede encontrar el libxml2 cargado y ahora seguirá la ruta del entorno, eventualmente encontrando
libxml2.2.7.8
en/opt/local
.PERO no podrá volver a copiar los archivos libxml antiguos. Esto se debe a que el sistema operativo necesita libxml2 que se cargó en el bootstrap.
Apagar y encender de nuevo bloqueará su máquina. La pantalla de inicio de sesión se colgará, se colgará y se colgará. Apague y encienda nuevamente en modo de usuario único (mantenga presionado Command- Smientras se reinicia). Puede ver cómo se produce el arranque. Bajo y he aquí, arroja un error de que no puede cargar libxml2 y luego deja de funcionar.
Apague y encienda de nuevo. Esta vez inicie en modo de recuperación (mantenga presionado Command- Ro mantenga presionado Optiony luego seleccione el disco de recuperación). En modo de recuperación abra el terminal (
utilities/terminal
). Montar/usr/lib
en su disco duro (TRY/Volumes/Macintosh\ HD/usr/lib
) y copiar los archivos libxml2 espalda. Reinicie y todo estará bien.fuente
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
~
, parece establecer este valor globalmente. Entonces, tal vez pueda hacer esto una vez y nunca más tendrá que preocuparse por eso.Si instaló Nokogiri con
gem install nokogiri
, puede resolver esta advertencia ejecutandogem pristine nokogiri
para recompilar la extensión C de la gema.Si instaló Nokogiri con
bundle install
, puede resolver esta advertencia ejecutandobundle exec gem pristine nokogiri
para recompilar la extensión C de la gema dondequiera que Bundler la haya instalado.fuente
bundle exec gem pristine nokogiri
justo en el clavo.Para solucionar este problema, si está usando homebrew y bundler, agregue
gem 'nokogiri'
a la parte superior de suGemfile
, luego ejecute estos comandos:gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle install
Si no usa bundler, ejecute estos comandos en su lugar:
gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
En su aplicación, primero debe requerir nokogiri , para forzar a la aplicación a cargar la biblioteca dinámica libxml2 en lugar de la versión anterior del sistema libxml2 cargada por gemas que no especificaron qué biblioteca cargar.
fuente
link
yunlink
sean necesarios. Pude escapar sin usarlos.gem
comandos conbundle exec
, por ejemplo, si está utilizandorbenv
.brew uninstall libxslt
?Nada de esto funcionó para mí.
Tenía libxml2 instalado en una versión posterior (2.7.8) con brew. Esto hizo que nokogiri se compilara contra él y los problemas posteriores. Solución, elimínela, compile y luego instálela si lo desea.
Esto es lo que funcionó:
brew uninstall libxml2
(si se instaló previamente)gem uninstall nokogiri
gem install nokogiri
brew install libxml2
(Opcional)fuente
brew uninstall libxml2
antemano lo hizo. ¡Gracias!bundle install
desde RubyMine. Puede ver el mismo error en la línea de comando si escriberake --tasks
La solución (para mí) después de actualizar a Mountain Lion fue mucho más simple:
gem uninstall nokogiri # (and ignore the warnings about dependencies) gem install nokogiri
fuente
Según el comentario de patrickmcgraw anterior, simplemente poner nokogiri como la primera entrada en mi Gemfile funcionó para mí. Lo pongo como una respuesta separada porque el comentario original ha sido enterrado.
source 'http://rubygems.org' gem 'nokogiri' gem 'rails', '3.0.20' etc...
fuente
Bundler tiene opciones para establecer las ubicaciones de construcción predeterminadas. Entonces, por ejemplo, con libxml2 instalado a través de macports:
$ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
Después de hacer esto y
bundle install
, la advertencia desapareció.También hay algunos ejemplos útiles para configurar las opciones de compilación en la wiki de nokogiri .
fuente
Parece que ha actualizado las bibliotecas de su sistema después de instalar la gema, por lo que debe actualizar Nokogiri. Para usar la versión lib actual:
fuente
Tuve un problema similar y lo resolví de esta manera:
En mi caso, tengo RVM instalado y tenía conjuntos de gemas @global y @project. Ambos tenían instalado nokogiri y uno de ellos había construido con diferentes libxml.
La reconstrucción de ambos (tengo motivos para hacer esto) resolvió el problema.
Espero que esto ayude..
fuente
gem uninstall nokogiri bundle #install nokogiri again
Si eso falla con "falta libxml2". y ves gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log intentando usar "/usr/bin/gcc-4.2 ...", entonces te falta /usr/bin/gcc-4.2
Solución:
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
Antes de:
$ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
Después:
$ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2 lrwxr-xr-x 1 root wheel 12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc
Si realmente te falta libxml2 libxslt, entonces
brew update brew install libxml2 libxslt brew link libxml2 libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle
FYI: Estoy ejecutando Mountain Lion con brebaje y empaque.
fuente
gem install libxml-ruby me ayuda
fuente
De hecho, tenía 2 versiones de libxml instaladas, una de origen y otra de RPM.
La siguiente es mi solución completa
Desinstalé la fuente (del directorio de fuentes)
Quitar paquetes
rm -rf ~/.bundle ~/.bundler
LD actualizado (puede que tenga que hacer esto como root, no como sudo)
Luego reinstaló el paquete
fuente
Me encontré con esto yo mismo (OS X Lion 10.7.5). Mi mensaje exacto fue: Nokogiri fue construido contra LibXML versión 2.8.0, pero ha cargado dinámicamente 2.7.3
Probé algunas sugerencias mencionadas aquí, ninguna funcionó, pero esto funcionó:
gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
La explicación es: "Esto sucede porque se usa la libxml2 predeterminada del sistema Lion (cargada en el arranque), independientemente de para qué libxml2 Nokogiri se haya construido".
Créditos a: https://coderwall.com/p/o5ewia
fuente
SO: Maverick 10.9.3
Ruby 1.9.3
ADVERTENCIA: Nokogiri fue construido contra LibXML versión 2.9.1, pero ha cargado dinámicamente 2.9.0
Mi solución:
gem uninstall nokogiri brew update cd /usr/local brew versions libxml2 git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0 brew install libxml2 bundle install or gem install nokogiri -v "1.5.11"
Espero que esto ayude
fuente
Si tiene este mensaje y su nokogiri está desactualizado con la versión disponible en la fuente de la gema, simplemente ejecute
bundle update nokogiri
para obtener el nuevo código y recompilarlo. Tu error debería desaparecer.fuente
SO: Catalina
Advertencia: la advertencia nokogiri se creó con la versión 2.9.10 de libxml pero se cargó dinámicamente 2.9.4
Seguí los pasos de Michiel de Mare , pero brew install libxml2 --with-xml2-config falló con un error de opción no válida. Así que instalé libxml2 y libxslt y tomé nota del resultado de ambos comandos.
brew install libxml2 ==> Downloading https://homebrew.bintray.com/bottles/libxml2-2.9.10_2.catalina.bottle.tar.gz Already downloaded: /Users/alberto/Library/Caches/Homebrew/downloads/9ddf5cb90fd16a7eb531e37bb748fd392f30214d9fe1568b2b70d28cc368c8f7--libxml2-2.9.10_2.catalina.bottle.tar.gz ==> Pouring libxml2-2.9.10_2.catalina.bottle.tar.gz ==> Caveats libxml2 is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble. If you need to have libxml2 first in your PATH run: echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc For compilers to find libxml2 you may need to set: export LDFLAGS="-L/usr/local/opt/libxml2/lib" export CPPFLAGS="-I/usr/local/opt/libxml2/include" For pkg-config to find libxml2 you may need to set: export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig" ==> Summary 🍺 /usr/local/Cellar/libxml2/2.9.10_2: 280 files, 10.6MB
brew install libxslt ==> Downloading https://homebrew.bintray.com/bottles/libxslt-1.1.34.catalina.bottle.tar.gz ==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cbadecf3186f45754220dff4cbdfbb576882a211d615b52249a4c9d8ba4d7c3a?response-content-disposition=attachment%3Bfil ######################################################################## 100.0% ==> Pouring libxslt-1.1.34.catalina.bottle.tar.gz ==> Caveats To allow the nokogiri gem to link against this libxslt run: gem install nokogiri -- --with-xslt-dir=/usr/local/opt/libxslt libxslt is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble. If you need to have libxslt first in your PATH run: echo 'export PATH="/usr/local/opt/libxslt/bin:$PATH"' >> ~/.zshrc For compilers to find libxslt you may need to set: export LDFLAGS="-L/usr/local/opt/libxslt/lib" export CPPFLAGS="-I/usr/local/opt/libxslt/include" For pkg-config to find libxslt you may need to set: export PKG_CONFIG_PATH="/usr/local/opt/libxslt/lib/pkgconfig" ==> Summary 🍺 /usr/local/Cellar/libxslt/1.1.34: 136 files, 2.8MB
Y usé esos directorios al configurar el paquete para nokogiri
bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt
Para resumir, ejecuté estos pasos
gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 brew install libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt bundle install
fuente