83 votes

Utilisateur Mac et obtenir AVERTISSEMENT : Nokogiri fut construite contre LibXML version 2.7.8, mais a chargé dynamiquement 2.7.3

J'ai fait toutes sortes de recherches et essayé beaucoup de choses différentes. Je sais que cette question a été répondu à plusieurs reprises, mais aucune des solutions proposées sont de travailler pour moi.

Après la mise à niveau vers lion, je suis la segmentation des défauts en ruby. Je suis assez confiant, son nokogiri. J'ai donc installé libxml2 via homebrew. J'ai couru 'brew lien libxml2'. Puis je l'ai réinstallé nokogiri utilisant la version de la bibliothèque.

Pour preuve:

$ 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

J'ai déjà inclus nokogiri en haut de mon gemfile et j'ai aussi nécessaire dans mon fichier d'environnement. Je n'ai aucune idée de pourquoi je suis encore en train de cette mise en garde.

Des suggestions ou des idées pour s'assurer de son chargement de la version libxml2?

Merci.

99voto

indirect Points 1910

Si vous avez installé Nokogiri avec , vous pouvez remédier à cet avertissement en exécutant à recompiler l’extension C de la gem.

Si vous avez installé Nokogiri avec , vous pouvez remédier à cet avertissement en exécutant à recompiler l’extension C de la gemme où Bundler installé.

58voto

Michiel de Mare Points 15888

Pour corriger cela si vous utilisez homebrew et bundler, ajoutez - gem 'nokogiri' vers le haut de votre Gemfile, puis exécutez ces commandes:

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 vous n'utilisez pas bundler, exécutez ces commandes:

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/

Dans votre application, vous devez exiger nokogiri d'abord, pour forcer l'application à charger la dynamique de la bibliothèque libxml2 la place de l'ancienne version du système de libxml2 chargé par des gemmes qui ne précise pas de quelles bibliothèque à charger.

39voto

Kenton Points 424

Je viens de passer la meilleure partie de la matinée de travail par le biais de cet avertissement. Ce correctif est pour les gens qui utilisent Mac OS Lion. Le correctif ci-dessus (bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local) est pour Snow Leopard avec libxml2 installé via macports.

Avec le Lion, libxml2 est chargé dans le cadre du processus de démarrage. Indépendamment de la libxml2 nokogiri pointe, le Lion, le système de bibliothèque par défaut pour libxml2 sera utilisé lors de l'exécution. Lion utilise libxml2.2.7.3 trouvé en /usr (pas /usr/local).

Tel que mentionné à plusieurs autres endroits, on peut simplement ignorer l'avertissement. Si, comme moi, l'avertissement vous rend fou, vous pouvez faire ceci:

bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local

Fait intéressant, si vous tapez nokogiri -v à la ligne de commande, vous obtiendrez le contraire d'avertissement: WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8

Ceci suggère qu'il n'est plus à la façon de libxml2 est en cours de chargement, avec Ruby & Rails en utilisant le système chargé libxml2 et de la ligne de commande à l'aide de libxml2 de l'environnement path. De toute façon, les silences de l'erreur pour moi.

Je vais le dire encore une fois – ce n'est que pour Lion. Le correctif précédent travail pour Snow Leopard.

C'est la fin de la réponse. Arrêter de lire ici.


OK, vous n'avez pas arrêter de lire... bien...

PAS RECOMMANDÉ!!!!!!

Vous avez été averti. Vous pouvez vérifier que Mac OSX est le chargement de la bibliothèque libxml2 dans son bootstrap par la désactivation de la libxml2 trouvé en /usr/lib. Faire quelque chose comme la copie de toutes les versions d' libxml2*.dylib de libxml2*.dylib.old (sur ma machine c'était libxml2.2.7.3, libxml2.2 et libxml2)

Après avoir fait cela, l'exécution de nokogiri ne produira pas d'erreurs. C'est parce qu'il ne peut pas trouver le chargé libxml2 et maintenant, suivez le chemin d'accès d'environnement, avant de trouver un libxml2.2.7.8 en /opt/local

MAIS... Vous ne serez pas en mesure de copier les anciens libxml les fichiers de retour. C'est parce que l'OS a besoin de la libxml2 qui a été chargé dans le bootstrap.

Éteindre et allumer à nouveau brique de votre machine. L'écran de connexion va s'accrocher et de se bloquer et de l'accrocher. Hors tension et à nouveau sous tension en mode mono-utilisateur (maintenez la touche Commande enfoncée-S lors du redémarrage). Vous pouvez regarder le bootstrap se produire. Faible et voici, il renvoie une erreur qu'il ne peut pas charger libxml2 et puis cesse de fonctionner.

Hors tension et à nouveau sous tension. Ce temps de démarrage en mode de récupération (maintenez la touche Commande enfoncée-R ou maintenez la touche Option enfoncée, puis sélectionnez le disque de récupération). En mode de récupération ouvrez le terminal (utilities/terminal). Mont - /usr/lib sur votre HD (essayez /Volumes/Macintosh\ HD/usr/lib) et la copie de la libxml2 les fichiers de retour. Reboot et tout ira bien :)

28voto

nkadwa Points 451

Rien de tout cela a fonctionné pour moi.

J’avais installé à une version ultérieure (2.7.8) avec infusion de libxml2. Cela a provoqué nokogiri compiler contre elle et des problèmes plus tard. Solution, enlever, puis construire, puis installer si vous le souhaitez.

Voici ce qui a fonctionné :

  • ``(si déjà installé)
  • ``
  • ``
  • ``(facultatif)

16voto

IAmNaN Points 2713

La solution (pour moi) après mise à jour vers Lion de montagne a été beaucoup plus simple :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X