Я просто потратил большую часть утра, работая над этим предупреждением. Это исправление предназначено для людей, использующих 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
).
Как уже упоминалось во многих других местах, предупреждение можно просто игнорировать. Если, как и я, предупреждение сводит вас с ума, вы можете сделать это:
bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/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 обратно. Перезагрузитесь, и все будет хорошо.
brew remove --force libxml2
bundle config --delete build.nokogiri
gem uninstall nokogiri libxml-ruby
bundle