Ruby gem Nokogiri 1.9.1在具有不同LibXML版本的Mac上失败

时间:2018-12-29 17:34:41

标签: ruby nokogiri libxml2 macos-high-sierra

我真的很讨厌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(尽管我从未使用过,我更喜欢升华),现在我已经安装了OSX 10.14的xcode。

有什么办法可以使Nokogiri针对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 :(得分:1)

根据them,它是:

简单安装libxml2

如果直接安装

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

如果使用捆绑包

捆绑配置build.nokogiri --use-system-libraries --with-xml2-include = $(brew --prefix libxml2)/ include / libxml2

捆绑安装

答案 1 :(得分:1)

...它在我的机器上工作...;-)

尽管《 Nokogiri教程》建议以复杂的方式手工制作您的本地环境-请参阅 https://www.nokogiri.org/tutorials/installing_nokogiri.html -如果完全遵循这些建议中的任何一个,那么我将继续尝试并尝试更新系统库的方向,而不是尝试使Nokogiri相对于较早的版本进行构建,仅是因为如果您使用捆绑程序安装gems,无论如何都不想搞乱手动安装宝石。 (除了进行故障诊断以一遍又一遍地重试该gem直到它起作用,然后确保bundler也可以做到这一点之外,但是在这里安装Nokogiri并不是问题。)

...因为:尽管您可能不想最后安装在Web服务器上,但是遵循https://12factor.net/dependencies中所述的使用应用程序声明和隔离依赖项的原则仍然是一个好主意。 / p>

捆绑程序和rvm(或rbenv)是在ruby / rails世界中的工具(或者就此而言,捆绑程序和docker,在这种情况下我不推荐)。

如果它仍然不能与rvm一起使用,我将执行以下操作:

  • 将rvm与gemsets一起使用。
  • 确保当前外壳使用所需的确切宝石集和红宝石版本。总是。

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

(具有适当的ruby版本)将创建ruby-version + gemset组合,并在目录中创建.ruby- *文件,确保在此目录中cd时使用此gemset。我所有的rails-app都有这个。 您的上方路径显示rvm在一个目录中抛出了一个ruby版本的所有gem)

  • 删除该宝石集中的所有宝石:$ rvm gemset empty
  • 并重新安装它们:
  • 运行:$ gem install bundler
  • 然后:$ bundle install

(这是让rvm确保您的应用程序/ rails /捆绑程序不会拾取系统范围内或rvm-ruby-version-wide gem文件夹中徘徊的任何gem的另一个版本的一种粗鲁但有效的方法-您的所有日志都没有显示实际运行的Nokogiri版本)

您可以使用`ls $ {rvm gemset dir)/ gems检查宝石集中的宝石


nb:关于此主题的堆栈溢出答案之一建议将gem rails放在Gemfile的顶部:

How to load correct version of dynamic libraries and gems (libxml, Nokogiri) within a custom Rails engine gem?

实际上,Gemfile的顺序对于启动rails很重要:

Does the order of gems in your Gemfile make a difference?

所以这也是一个好主意。

答案 2 :(得分:0)

好的,我发现了一个奇怪的序列,足以使我完成“ Rails简介”讲座:

使用rvm use 2.3.3 返回到Ruby 2.3.3,其中仍安装了rails 5.2.2。我先安装了gem install sqlite3,然后再安装了build install的sqlite3。 现在我可以启动服务器了!

我在新的rvm gemset中使用Ruby 2.5.3再次尝试了。 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,这就是我现在要做的。但是某处发生了什么事情……。感谢所有帮助!