我正在构建一个使用 Nokogiri gem 的 Rails 引擎,但我在 MacOS 10.7 和 10.8 中的开发设置遇到了问题:
为了让 Nokogiri 在我的设置中正常工作,我更新了 libxml 和 libxslt 库:
brew update
brew install libxslt
brew upgrade libxml2
gem uninstall nokogiri
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28
如果我在“常规”rails 应用程序中使用 Nokogiri,它可以正常工作(将其包含在 Gemfile 中,运行 bundle install)。
当我尝试从我正在构建的 Rails 引擎中使用 Nokogiri 并将我的应用程序用作 gem 时,出现了问题。
在 gemspec 中:
s.add_dependency 'nokogiri' # XML parsing
我还在 Gem 的 Gemfile 顶部尝试了以下内容:
gem 'nokogiri'
当我启动一个使用我的 Rails Engine gem 的应用程序时,我收到以下警告:
WARNING: Nokogiri was built against LibXML version 2.9.0, but has dynamically loaded 2.7.8
如何配置 gem 和/或 bundler 和/或 Rails 以使用正确版本的 Nokogiri 和 libxml 以及 libxslt?
此外,这是 nokogiri -v
# Nokogiri (1.5.9)
---
warnings: []
nokogiri: 1.5.9
ruby:
version: 1.9.3
platform: x86_64-darwin12.3.0
description: ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0]
engine: ruby
libxml:
binding: extension
compiled: 2.9.0
loaded: 2.9.0
最佳答案
将 Rails Engine gem 放在应用程序 Gemfile 的顶部。然后,在 Rails 引擎的 gemspec 和 Gemfile 中,确保在其他使用 libxml(如 pg)的 gem 之前有 nokogori。
关于ruby-on-rails - 如何在自定义 Rails 引擎 gem 中加载正确版本的动态库和 gem(libxml、Nokogiri)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921700/