ruby-on-rails - 如何在自定义 Rails 引擎 gem 中加载正确版本的动态库和 gem(libxml、Nokogiri)?

标签 ruby-on-rails ruby nokogiri libxml2 rails-engines

我正在构建一个使用 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/

相关文章:

ruby-on-rails - 如何使用 JSON 的 Nokogiri 中的 XPath 从 eBay 和亚马逊抓取图像

ruby-on-rails - 如何在 XML 中查找文本并使用 Nokogiri 显示其同级?

ruby - Mechanize :从多个相同表单中选择正确的提交

ruby-on-rails - Heroku 网站因 Rails 3.2.9 和路由约束而崩溃

ruby-on-rails - 如何设置 Stripe gem

ruby - 在 Ruby 中查找周期和范围集差异的有效方法

ruby-on-rails - 特殊字符的验证

ruby-on-rails - 如何在 Rails 的部分模板中有一个可选的局部变量?

ruby-on-rails - 为什么 'awk' 命令在 Ruby on Rails 中使用时不向变量返回任何内容?

ruby-on-rails - Ruby rake loaderror - bundle exec rake 不工作