Я провел всевозможные исследования и пробовал много разных вещей. Я знаю, что на этот вопрос много раз отвечали, но ни одно из предложенных решений у меня не работает.
После обновления до Lion я получаю ошибки сегментации в Ruby. Я почти уверен, что это Нокогири. Итак, я установил libxml2 через Homebrew. Я сбежал brew link libxml2
. Затем я переустановил Nokogiri, используя эту версию библиотеки.
Для доказательства:
$ 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
Я уже включил Nokogiri в начало своего гем-файла, и мне также нужно, чтобы он был в моем файле среды. Понятия не имею, почему я все еще получаю это предупреждение.
Есть ли предложения или идеи, чтобы убедиться, что загружается правильная версия libxml2?
brew remove --force libxml2
bundle config --delete build.nokogiri
gem uninstall nokogiri libxml-ruby
bundle
1.6.2.1
иUbuntu 12.04
не играй хорошо. Отказываюсь от1.6.1
исправления после того, как попробовал все остальные исправления, которые смог найти.Ответы:
Я просто потратил большую часть утра, работая над этим предупреждением. Это исправление предназначено для людей, использующих Mac OS Lion. Исправление выше с использованием
bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
предназначен для Snow Leopard с libxml2, установленным через MacPorts.
В Lion libxml2 загружается как часть процесса начальной загрузки. Независимо от того, на что указывает libxml2 Nokogiri, во время выполнения будет использоваться системная библиотека Lion по умолчанию для libxml2. Lion использует libxml2.2.7.3 из
/usr
(не/usr/local
).Как уже упоминалось во многих других местах, предупреждение можно просто игнорировать. Если, как и я, предупреждение сводит вас с ума, вы можете сделать это:
Интересно, что если набрать
nokogiri -v
в командной строке, вы получите противоположное предупреждение:WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8
Это говорит о том, что существует больше информации о том, как загружается libxml2: Ruby и Rails используют загруженную системой libxml2, а в командной строке - libxml2 из пути к среде. Во всяком случае, это заглушает ошибку для меня.
Повторюсь - это только для Lion. Предыдущее исправление будет работать для Snow Leopard.
Это конец ответа. Прекратите читать здесь.
Хорошо, ты не перестал читать ... ну ...
НЕ РЕКОМЕНДУЕТСЯ!!!!!!
Вы были предупреждены. Вы можете убедиться, что Mac OSX загружает библиотеку libxml2 в свой загрузочный файл, отключив libxml2, найденную в
/usr/lib
. Сделайте что-нибудь вроде копирования всех версийlibxml2*.dylib
вlibxml2*.dylib.old
(на моей машине это былоlibxml2.2.7.3
,libxml2.2
иlibxml2
).После этого запуск Nokogiri не приведет к ошибкам. Это потому, что он не может найти загруженный libxml2 и теперь будет следовать по пути среды, в конечном итоге найдя
libxml2.2.7.8
в/opt/local
.НО вы не сможете скопировать старые файлы libxml обратно. Это связано с тем, что ОС требуется библиотека libxml2, которая была загружена при загрузке.
Выключение и повторное включение заблокируют вашу машину. Экран входа в систему будет зависать и зависать. Выключите и снова включите в однопользовательском режиме (удерживайте Command- Sпри перезагрузке). Вы можете наблюдать, как происходит начальная загрузка. Низкий и вот, он выдает ошибку, что не может загрузить libxml2, а затем перестает работать.
Выключите и снова включите. На этот раз загрузитесь в режиме восстановления (удерживайте Command- Rили удерживайте, Optionа затем выберите диск восстановления). В режиме восстановления откройте терминал (
utilities/terminal
). Смонтируйте/usr/lib
на свой HD (попробуйте/Volumes/Macintosh\ HD/usr/lib
) и скопируйте файлы libxml2 обратно. Перезагрузитесь, и все будет хорошо.источник
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
~
, похоже, это значение будет установлено глобально. Так что, возможно, вы сможете сделать это один раз и больше никогда не придется об этом беспокоиться.Если вы установили Nokogiri с
gem install nokogiri
, вы можете устранить это предупреждение, запустивgem pristine nokogiri
перекомпиляцию расширения C гемма.Если вы установили Nokogiri с помощью
bundle install
, вы можете устранить это предупреждение, запустивbundle exec gem pristine nokogiri
перекомпиляцию расширения C гемма, где бы Bundler его ни установил.источник
bundle exec gem pristine nokogiri
Успешно справился.Чтобы это исправить , если вы используете доморощенные и Bundler, добавить
gem 'nokogiri'
к вершине из вашихGemfile
, а затем выполните следующие команды: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
Если вы не используете сборщик, запустите вместо этого следующие команды:
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/
В вашем приложении вы должны сначала потребовать nokogiri , чтобы приложение загружало динамическую библиотеку libxml2 вместо более старой системной версии libxml2, загруженной гемами, которые не могли указать, какую библиотеку загружать.
источник
link
иunlink
нужны команды. Я смог обойтись без них.gem
командамbundle exec
- например, если вы используетеrbenv
.brew uninstall libxslt
?У меня ничего из этого не сработало.
У меня был установлен libxml2 в более поздней версии (2.7.8) с brew. Это привело к компиляции nokogiri против него и последующих проблем. Решение, удалите его, затем создайте, затем установите, если хотите.
Вот что сработало:
brew uninstall libxml2
(если установлен ранее)gem uninstall nokogiri
gem install nokogiri
brew install libxml2
(необязательный)источник
brew uninstall libxml2
заранее решила . благодаря!bundle install
из RubyMine. Вы можете увидеть ту же ошибку в командной строке, если наберетеrake --tasks
Решение (для меня) после обновления до Mountain Lion было намного проще:
gem uninstall nokogiri # (and ignore the warnings about dependencies) gem install nokogiri
источник
В соответствии с комментарием от patrickmcgraw выше, у меня сработало просто поместить nokogiri в качестве первой записи в моем Gemfile. Я помещаю это как отдельный ответ, потому что исходный комментарий был похоронен.
source 'http://rubygems.org' gem 'nokogiri' gem 'rails', '3.0.20' etc...
источник
Bundler имеет параметры для установки местоположений сборки по умолчанию. Так, например, при установке libxml2 через macports:
$ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
После этого и
bundle install
предупреждение исчезло.Также есть несколько полезных примеров настройки параметров сборки в вики nokogiri .
источник
Похоже, вы обновили свои системные библиотеки после установки гема, поэтому вам нужно обновить Nokogiri. Чтобы использовать текущую версию библиотеки:
источник
У меня была аналогичная проблема, и я решил ее так:
В моем случае у меня установлен RVM, и у меня были наборы гемов @global и @project. У обоих из них был установлен nokogiri, а один из них был построен с другим libxml.
Восстановление их обоих (у меня есть причина для этого) решило проблему.
Надеюсь это поможет..
источник
gem uninstall nokogiri bundle #install nokogiri again
Если это не удается с «libxml2 отсутствует». и вы видите, что gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log пытается использовать "/usr/bin/gcc-4.2 ...", значит, вам не хватает /usr/bin/gcc-4.2
Решение:
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
До:
$ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
После:
$ 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
Если вам действительно не хватает libxml2 libxslt, тогда
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
К вашему сведению: я использую Mountain Lion с пивом и упаковщиком.
источник
gem install libxml-ruby мне помогает
источник
На самом деле у меня было установлено 2 версии libxml, одна из исходников, другая из RPM.
Ниже приводится мое полное решение
Я удалил исходный код (из исходного каталога)
Удалить пакеты
rm -rf ~/.bundle ~/.bundler
Обновлен LD (возможно, придется сделать это как root, а не sudo)
Потом переустановил связку
источник
Просто столкнулся с этим сам (OS X Lion 10.7.5). Мое точное сообщение было: Nokogiri был построен на основе LibXML версии 2.8.0, но динамически загружен 2.7.3.
Я попробовал несколько предложений, упомянутых здесь, ни одно из них не сработало, но это сработало:
gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
Объяснение таково: «Это происходит из-за того, что используется стандартная система Lion libxml2 (загружается при начальной загрузке), независимо от того, на какой libxml2 была создана Nokogiri».
Кредиты на: https://coderwall.com/p/o5ewia
источник
ОС: Maverick 10.9.3
Рубин 1.9.3
ПРЕДУПРЕЖДЕНИЕ: Nokogiri был построен на основе LibXML версии 2.9.1, но динамически загружается 2.9.0.
Мое решение:
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"
Надеюсь на эту помощь
источник
Если у вас есть это сообщение и ваш nokogiri устарел с версией, доступной из источника гема, просто запустите,
bundle update nokogiri
чтобы получить новый код и перекомпилировать. Ваша ошибка должна исчезнуть.источник
ОС: Каталина
Предупреждение: предупреждение nokogiri было построено против libxml версии 2.9.10, но динамически загружено 2.9.4
Я выполнил шаги Michiel de Mare , но brew install libxml2 --with-xml2-config завершился неудачно с ошибкой неверной опции. Итак, я установил libxml2 и libxslt и обратил внимание на вывод обеих команд.
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
И я использовал эти каталоги при настройке пакета для 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
Подводя итог, я выполнил эти шаги
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
источник