rlk*_*024 10 ruby ruby-on-rails nokogiri
在Rails 3,我发现我每次调用框架,无论是从rake,rails server或其他任何东西,我得到以下警告:
Nokogiri was built against LibXML version 2.7.7, but has dynamically loaded 2.7.3
Run Code Online (Sandbox Code Playgroud)
在Google上搜索会产生一些博客文章,所有帖子都建议使用显式库和包含路径重建Nokogiri.例如:
http://mrflip.github.com/2009-08/nokogiri-hates-libxml2-on-osx.html
但是,这并没有为我解决问题.
打字nokogiri -v给我这个:
---
warnings: []
ruby:
engine: mri
version: 1.8.7
platform: i686-darwin10.4.0
libxml:
loaded: 2.7.7
binding: extension
compiled: 2.7.7
nokogiri: 1.4.4
Run Code Online (Sandbox Code Playgroud)
这似乎表明我的构建运行正常,Nokogiri正在加载正确的库版本.为什么Rails会抱怨?
我实际上找到了答案,我想我会在这里分享.请参阅下面的答案.
rlk*_*024 14
问题是其他库正在加载早期的libxml版本.我通过在我的Gemfile中评论出来找到了这个.具体来说,在我的情况下,RMagick正在加载libxml 2.7.3.(它使用libxml来读取SVG文件.)
我尝试重建RMagick对抗libxml 2.7.7,如下所示:
gem install --no-rdoc --no-ri rmagick -- --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-include=/opt/local/libxslt --with-xslt-lib=/opt/local/lib
Run Code Online (Sandbox Code Playgroud)
然而,RMagick似乎并不关心那些旗帜.它再次使用2.7.3构建.(如果有人知道如何针对特定的libxml版本构建RMagick,请分享您的知识.)
最终,我确实找到了一个中等体面的解决方案.我决定,如果我无法解决这两个宝石之间的版本冲突,我至少会支持使用较新版本的libxml的Nokogiri.为此,我弄清楚我的Gemfile中的哪些宝石正在使用Nokogiri并将它们放在第一位.
所以,虽然我曾经这样:
gem 'rmagick', :require => 'RMagick'
gem 'sanitize' # Has Nokogiri as dependency
Run Code Online (Sandbox Code Playgroud)
我现在有这个:
gem 'sanitize' # Has Nokogiri as dependency
gem 'rmagick', :require => 'RMagick'
Run Code Online (Sandbox Code Playgroud)
现在警告消失了,RMagick尚未抱怨.免责声明:我在我的应用程序中不使用SVG,因此我没有确认RMagick与libxml 2.7.7完全兼容.
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |