如何在自定义Rails引擎gem中加载正确版本的动态库和gem (libxml, Nokogiri)



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

和Nokogiri工作正常,如果我使用它在一个"常规"的rails应用程序(包括它在Gemfile,运行bundle install)。

问题出现时,我试图使用Nokogiri从Rails引擎,我正在构建和使用从我的应用程序作为一个宝石。

在gemspec:

s.add_dependency 'nokogiri' # XML parsing

我还在Gem的Gemfile的顶部尝试了以下操作:

gem 'nokogiri'

当我启动一个使用Rails引擎gem的应用程序时,我得到以下警告:

WARNING: Nokogiri was built against LibXML version 2.9.0, but has dynamically loaded 2.7.8

我如何配置gem和/或捆绑器和/或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的gem(如pg)之前有nokogori。

最新更新