- 更新日: 2014年8月9日
- Ruby
nokogiri インストール時のエラー Running ‘patch’ for libxml2 2.8.0… ERROR
bundle install で nokogiri をインストールしようとしたら、”Running ‘patch’ for libxml2 2.8.0… ERROR” エラーに遭遇しました。正確には、vagrant 上に chef-solo でプロビジョニングした CentOS 環境に、capistrano でのデプロイテストを行っている途中で起きたエラーです。
バンドルされた libxml2-2.8.0 インストール中にエラー発生
nokogiri が依存する libxml2-2.8.0 のインストール時にエラーが発生したのですが、どうやら nokogiri はデフォルトでは libxml2-2.8.0 を同梱していて、今回の場合 libxml2-2.8.0 インストール中にエラーが起きていた。以下 capistrano により出力されたエラーログ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
DEBUG[95c3bb26] Gem::Ext::BuildError: ERROR: Failed to build gem native extension. DEBUG[95c3bb26] DEBUG[95c3bb26] /usr/local/rbenv/versions/2.1.2/bin/ruby extconf.rb DEBUG[95c3bb26] Building nokogiri using packaged libraries. DEBUG[95c3bb26] checking for iconv.h... yes DEBUG[95c3bb26] checking for iconv_open() in iconv.h... yes DEBUG[95c3bb26] Building libxml2-2.8.0 for nokogiri with the following patches applied: DEBUG[95c3bb26] - 0001-Fix-parser-local-buffers-size-problems.patch DEBUG[95c3bb26] - 0002-Fix-entities-local-buffers-size-problems.patch DEBUG[95c3bb26] - 0003-Fix-an-error-in-previous-commit.patch DEBUG[95c3bb26] - 0004-Fix-potential-out-of-bound-access.patch DEBUG[95c3bb26] - 0005-Detect-excessive-entities-expansion-upon-replacement.patch DEBUG[95c3bb26] - 0006-Do-not-fetch-external-parsed-entities.patch DEBUG[95c3bb26] - 0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch DEBUG[95c3bb26] - 0008-Improve-handling-of-xmlStopParser.patch DEBUG[95c3bb26] - 0009-Fix-a-couple-of-return-without-value.patch DEBUG[95c3bb26] - 0010-Keep-non-significant-blanks-node-in-HTML-parser.patch DEBUG[95c3bb26] - 0011-Do-not-fetch-external-parameter-entities.patch DEBUG[95c3bb26] ************************************************************************ DEBUG[95c3bb26] IMPORTANT! Nokogiri builds and uses a packaged version of libxml2. DEBUG[95c3bb26] DEBUG[95c3bb26] If this is a concern for you and you want to use the system library DEBUG[95c3bb26] instead, abort this installation process and reinstall nokogiri as DEBUG[95c3bb26] follows: DEBUG[95c3bb26] DEBUG[95c3bb26] gem install nokogiri -- --use-system-libraries DEBUG[95c3bb26] DEBUG[95c3bb26] If you are using Bundler, tell it to use the option: DEBUG[95c3bb26] DEBUG[95c3bb26] bundle config build.nokogiri --use-system-libraries DEBUG[95c3bb26] bundle install DEBUG[95c3bb26] DEBUG[95c3bb26] However, note that nokogiri does not necessarily support all versions DEBUG[95c3bb26] of libxml2. DEBUG[95c3bb26] DEBUG[95c3bb26] For example, libxml2-2.9.0 and higher are currently known to be broken DEBUG[95c3bb26] and thus unsupported by nokogiri, due to compatibility problems and DEBUG[95c3bb26] XPath optimization bugs. DEBUG[95c3bb26] ************************************************************************ DEBUG[95c3bb26] Extracting libxml2-2.8.0.tar.gz into tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0... OK DEBUG[95c3bb26] Running patch with /path/to/project/shared/bundle/ruby/2.1.0/gems/nokogiri-1.6.2.1/ports/patches/libxml2/0001-Fix-parser-local-buffers-size-problems.patch... DEBUG[95c3bb26] Running 'patch' for libxml2 2.8.0... ERROR, review 'tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0/patch.log' to see what happened. DEBUG[95c3bb26] *** extconf.rb failed *** DEBUG[95c3bb26] Could not create Makefile due to some reason, probably lack of necessary DEBUG[95c3bb26] libraries and/or headers. Check the mkmf.log file for more details. You may DEBUG[95c3bb26] need configuration options. |
ググったところ、この nokogiri に同梱された libxml2 を使わずに、システム内のを使うとインストールが上手くいくという情報をいくつか見つけました。出力されたログにもヒントになるメッセージがあり、システム内の libxml2 を利用する場合は、use-system-libraries のオプションを使えとあります。
1 2 3 4 5 6 7 8 9 10 11 12 |
DEBUG[95c3bb26] If this is a concern for you and you want to use the system library DEBUG[95c3bb26] instead, abort this installation process and reinstall nokogiri as DEBUG[95c3bb26] follows: DEBUG[95c3bb26] DEBUG[95c3bb26] gem install nokogiri -- --use-system-libraries DEBUG[95c3bb26] DEBUG[95c3bb26] If you are using Bundler, tell it to use the option: DEBUG[95c3bb26] DEBUG[95c3bb26] bundle config build.nokogiri --use-system-libraries DEBUG[95c3bb26] bundle install |
Gemfile に ENV[‘NOKOGIRI_USE_SYSTEM_LIBRARIES’] = ‘YES’ を追加
まずはデプロイ先の vagrant 環境のシステム内に libxml2, libxslt が入っているかを確認。
libxml2 のバージョン確認。
1 2 3 4 5 |
$ vagrant ssh $ xml2-config --version 2.7.6 |
libxslt のバージョン確認。
1 2 3 4 |
$ xslt-config --version 1.1.26 |
入ってなければ、インストールする Recipe を書いて適用させる。
調べたところ Gemfile に以下のように書いても、システム内のライブラリを使用するように指定できるそうなので、こっちの書き方にしました。
Gemfile
1 2 3 4 |
source "https://rubygems.org" ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = 'YES' gem 'nokogiri' |
デプロイをもう一回試す。
1 2 3 |
$ bundle exec cap vagrant deploy |
今度は上手く nokogiri をインストールできました。
nokogori のバージョン・情報を確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ vagrant ssh $ bundle exec nokogiri -v # Nokogiri (1.6.2.1) --- warnings: [] nokogiri: 1.6.2.1 ruby: version: 2.1.2 platform: x86_64-linux description: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux] engine: ruby libxml: binding: extension source: system compiled: 2.7.6 loaded: 2.7.6 |
おお、ちゃんとシステム内の libxml2(バージョン: 2.7.6)のライブラリを利用して nokogiri が入りました。システム内のライブラリを使用するので、nokogiri のインストール時間が少しは短くなる効果もあるんじゃないでしょうか。
- – 参考リンク –
- libxml2/libxsltのインストール for nokogiri on CentOS | Articles@www.e-mist.com
- Railsチュートリアルのnokogiriのインストールでコケた時の対処法 – ノンカフェインであなたにやさしい
- Ruby – Nokogiri 1.6.0 のインストールが遅い件とその解決方法 – Qiita
- ruby on rails – nokogiri gem installation error – Stack Overflow
- Ruby の関連記事
- Gemの作り方(Ruby Gem)
- ローカル開発中のgemをGemfileに書いてインストール
- 熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
- El Capitanでgemのnative extensionビルド失敗に対応
- Rubyで親クラスから子クラスの定数を参照
- MacabをRubyで使う
- rbenv/ruby-buildでRuby最新バージョンをインストール
- Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
- 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
- Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
Leave Your Message!