QA@IT

Mac上のRuby 2.1.2p95でNokogiriが正しくインストールできない

4564 PV

Ruby 2.1.2p95でNokogiriがインストールできなくて困っています。libxml2とlibxsltの動的ライブラリのロードとか、その辺の問題じゃないのかなという気がするのですが、良く分かりません。

環境は、

  • Mac OS X 10.9.3
  • Ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]

で、

brew install libxml2
brew install libxslt

brew link libxml2
brew link libxslt

としてから、

gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib/ -- with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28/ --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include/ --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

としました。インストール自体は完了するのですが、nokogiri を require すると以下のようにエラーが出ます。

$ ruby script.rb
/usr/local/Cellar/ruby/2.1.2_2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': dlopen(/usr/local/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/nokogiri-1.6.2.1/nokogiri/nokogiri.bundle, 9): Library not loaded: /usr/local/opt/ruby/lib/libruby.2.1.0.dylib (LoadError)
  Referenced from: /usr/local/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/nokogiri-1.6.2.1/nokogiri/nokogiri.bundle
  Reason: image not found - /usr/local/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/nokogiri-1.6.2.1/nokogiri/nokogiri.bundle
    from /usr/local/Cellar/ruby/2.1.2_2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/lib/ruby/gems/2.1.0/gems/nokogiri-1.6.2.1/lib/nokogiri.rb:29:in `rescue in <top (required)>'
    from /usr/local/lib/ruby/gems/2.1.0/gems/nokogiri-1.6.2.1/lib/nokogiri.rb:25:in `<top (required)>'
    from /usr/local/Cellar/ruby/2.1.2_2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `require'
    from /usr/local/Cellar/ruby/2.1.2_2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
    from /usr/local/Cellar/ruby/2.1.2_2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in `require'
    from script.rb:3:in `<main>'

追記:

$ otool -L /usr/local/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/nokogiri-1.6.2.1/nokogiri/nokogiri.bundle 
/usr/local/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/nokogiri-1.6.2.1/nokogiri/nokogiri.bundle:
    /usr/local/opt/ruby/lib/libruby.2.1.0.dylib (compatibility version 2.1.0, current version 2.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
    /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/liblzma.5.dylib (compatibility version 6.0.0, current version 6.3.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
  • 結局わたしは解決を諦めてNokogiri非依存にコードを書き換えました。実は正規表現でも大したことがなかったのでした。しかし、Nokogiriないとこの先困りそう……。 -

回答

参考までに Mac OS X 10.9.4 ではうまく行きますね。
2.1.2のインストールから始めました。

$ sudo brew update
Password:
$ brew upgrade ruby-build
$ rbenv install 2.1.2

$ brew install libxml2
$ brew install libxslt

$ brew link libxml2 --force
$ brew link libxslt --force

$ gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib/ -- with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28/ --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include/ --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

$ gem list | grep nokogiri
nokogiri (1.6.2.1)
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
$ irb
irb(main):001:0> require 'nokogiri'
=> true

ちなみに /usr/local/Cellar/libiconv/ ディレクトリは存在しない状態です。


あとは、こちらの issueの中で
https://github.com/sparklemotion/nokogiri/issues/1111

nokogiri 1.6.1ならば動いたというコメントがあったので、試してみるのも手かもしれません。

The same problem when install nokogiri v '1.6.2.1'.
By the way, with ruby 2.1.1 and nokogiri v '1.6.1' everuthing is fine.

編集 履歴 (0)
  • ありがとうございます。色々試したあとに、すでに動いてる方法でやろうと思って、こちらの通りやったのですが、何故かダメでした。ともあれ、ありがとうございます。 -

brew linkに--force抜けてるからとか?

編集 履歴 (0)

--use-system-libraries でしょうか

編集 履歴 (0)
  • うーん、だめでした。
    Building nokogiri using system libraries.
    libxml2 version 2.6.21 or later is required!
    *** extconf.rb failed ***
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。