Ruby gem Nokogiri 1.9.1 не работает на Mac с различными версиями LibXML - PullRequest
0 голосов
/ 29 декабря 2018

Я действительно ненавижу эти обновления в Ruby / Rails ....

У меня Mac High Sierra OSX 10.13.В последний раз я использовал Ruby / Rails около года назад, поэтому, конечно, мне нужно было что-то обновить.Я ходил по карусели обновлений, но я застрял на следующем:

Nokogiri was built against LibXML version 2.9.4, but has dynamically loaded 2.7.8

Я нахожу много вопросов со старыми версиями Nokogiri и LibXML, но не с этими более новыми версиями.Я также попробовал все ответы.

Я думаю, что проблема может быть в том, что я обновил xcode (хотя я никогда не использую его, я предпочитаю возвышенный), прежде чем уехать в путешествие, и теперь у меня есть xcodeдля OSX 10.14 установлен.

Можно ли как-нибудь заставить Нокогири строить против 2.7.8?Я только хотел продемонстрировать классу, насколько крут Ruby on Rails (и сейчас я вообще не вижу в этом классности).Я попытался

gem install nokogiri -- --use-system-libraries --with-libxml-prefix=/usr/local/Cellar/libxml2/2.7.8

, но он все еще построен на libxml2 2.9.4!

Хотелось бы решить эту проблему в 2018 году:)

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

... он работает на моей машине ...; -)

Хотя в Учебном пособии по Nokogiri предлагается сложное ручное изготовление вашей местной среды - см. https://www.nokogiri.org/tutorials/installing_nokogiri.html - если придерживаться какого-либо из нихВ общем, я хотел бы уйти вперёд и попробовать направление обновления системной библиотеки, а не пытаться заставить Nokogiri собирать более старую версию, хотя бы потому, что если вы устанавливаете гем с использованием bundler, вы не захотите возитьсяв любом случае с ручными установками драгоценных камней.(За исключением устранения неполадок, повторяйте этот драгоценный камень снова и снова, пока он не заработает, а затем убедитесь, что компоновщик может это сделать, но установка Nokogiri здесь не проблема).

... потому что:хотя вы, возможно, не захотите устанавливать его на веб-сервере в конце, придерживаться принципа объявления и изоляции зависимостей с помощью приложения, как описано в https://12factor.net/dependencies, по-прежнему отличная идея.

И связкаи rvm (или rbenv) - инструменты для этого в мире ruby ​​/ rails (или, в этом отношении, bundler и docker, который я не рекомендовал бы в этой ситуации).

Если это все еще не 'Чтобы работать с rvm, я бы сделал следующее:

  • используйте rvm с наборами гемов.
  • убедитесь, что текущая оболочка использует ту версию gemset и ruby, которую вы хотите.Always.

    rvm use 2.5.1@my-gemset --create --ruby-version

(с соответствующей версией ruby) создает комбинацию ruby-version + gemset и создает файлы .ruby- * в директории, убедившись, чтоэтот набор используется, когда вы перейдете в этот каталог.все мои рельсы-приложения имеют это.Ваш путь выше показывает, что rvm выбрасывает все гемы для одной версии ruby ​​в один каталог)

  • удалить все гемы в наборе гемс: $ rvm gemset empty
  • и переустановить их:
  • run: $ gem install bundler
  • и затем: $ bundle install

(это грубый, но эффективный способ заставить rvm убедиться, что ваше приложение / rails / bundler победило 't выбрать другую версию любого драгоценного камня, находящегося в вашей общесистемной папке или в папке gem для всей системы rvm-ruby-version - ни один из ваших журналов не показал, какая версия Nokogiri на самом деле работала)

вы можете проверить наgems в вашем наборе gem с помощью `ls $ (rvm gemset dir) / gems


nb: один из ответов переполнения стека на эту тему предлагает поместить gem rails в верхней части файла Gemfile:

Как загрузить правильную версию динамических библиотек и гемов (libxml, Nokogiri) в пользовательский гем движка Rails?

и действительно, порядок Gemfile имеет значение при запуске rails:

Делает ли порядок камней в вашем Gemfilefference?

, так что это тоже может быть хорошей идеей.

0 голосов
/ 30 декабря 2018

Хорошо, я нашел причудливую последовательность, которая работает для меня достаточно, чтобы пройти лекцию «Введение в Rails»:

Перейти назад в Ruby 2.3.3 с rvm use 2.3.3 гдерельсы 5.2.2 еще были установлены.Я переустановил sqlite3 с gem install sqlite3, а затем build install. Теперь Я могу запустить сервер!

Я попробовал еще раз с Ruby 2.5.3 в новом наборе гемов rvm.sqlite3 устанавливается, gem install rails получает ошибку разрешения, поэтому мне нужно rvmsudo gem install rails, и это решает проблему nokogiri.Я попытался bundle install после установки

bundle config build.nokogiri --use-system-libraries --with-xml2-include=$(brew --prefix libxml2)/include/libxml2

, и я просто получил Could not locate Gemfile

Я могу вернуться к 2.3.3, и вот что яЯ собираюсь сделать сейчас.Но что-то облажалось где-то .... Спасибо за помощь!

0 голосов
/ 30 декабря 2018

Согласно их это:

brew install libxml2

При прямой установке

gem install nokogiri - --use-system-library--with-xml2-include = $ (brew --prefix libxml2) / include / libxml2

При использовании Bundle

комплект конфигурации пакета build.nokogiri --use-system-library --with-xml2-include = $ (brew --prefix libxml2) / include / libxml2

установка пакета

...