IMPORTANT! Nokogiri builds and uses a packaged version of libxml2.
先週今週と、週末を挟んでアップデートしたらのこぎりがアップデートされて不審な動きをしていたので、Dev->Stg->Prod とアップデートしたら、Stg 環境だけエラーを吐いて bundle update 失敗しました。
bundle update nokogiri
かみなりじゃないわ、いかづちよ!という訳で kaminari を利用しているので、依存関係にある nokogiri のアップデートを検知してアップデートされたのですが、以下のように不審なメッセージが。
Building libxml2-2.8.0 for nokogiri with the following patches applied: - 0001-Fix-parser-local-buffers-size-problems.patch - 0002-Fix-entities-local-buffers-size-problems.patch - 0003-Fix-an-error-in-previous-commit.patch - 0004-Fix-potential-out-of-bound-access.patch - 0005-Detect-excessive-entities-expansion-upon-replacement.patch - 0006-Do-not-fetch-external-parsed-entities.patch - 0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch - 0008-Improve-handling-of-xmlStopParser.patch - 0009-Fix-a-couple-of-return-without-value.patch - 0010-Keep-non-significant-blanks-node-in-HTML-parser.patch - 0011-Do-not-fetch-external-parameter-entities.patch ************************************************************************ IMPORTANT! Nokogiri builds and uses a packaged version of libxml2. If this is a concern for you and you want to use the system library instead, abort this installation process and reinstall nokogiri as follows: gem install nokogiri -- --use-system-libraries If you are using Bundler, tell it to use the option: bundle config build.nokogiri --use-system-libraries bundle install However, note that nokogiri does not necessarily support all versions of libxml2. For example, libxml2-2.9.0 and higher are currently known to be broken and thus unsupported by nokogiri, due to compatibility problems and XPath optimization bugs. ************************************************************************ 以下続く
ヴェッ?!ナンデと思ったので、github の issue や Google group のトピックを見に行ったら「お前ら動かない動かないって文句ばかり言うんじゃねーよ、ライブラリのアップデートしろ!オォン?出来ない?!自分で解決しろボケ!」という作者の無言の熱いメッセージを感じました。本当に作者がそう思ってたのかはわかりませぬ。
とりあえず上記メッセージにも書いてありますが「システムワイドのライブラリと利用するなら、このプロセスを中断して再度オプションつけて実行してね」というのがこの問題(というか、ライブラリを別途用意される現象)の回避方法です
こけた
とりあえずこれこけた所のエラーメッセージ参考にする限り、therubyracer の libv8 バイナリ配布?みたいな解決方法なんかな。
Extracting libxml2-2.8.0.tar.gz into tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0... OK Running patch with /var/www/dev-petitwedding.l-brain-sys.com/vendor/bundle/ruby/2.0.0/gems/nokogiri-1.6.2.1/ports/patches/libxml2/0001-Fix-parser-local-buffers-size-problems.patch... 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. *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
libxml2-2.8.0.tar.gz を持ってきて、パッチ当てたライブラリを作成して、nokogiri はそのライブラリを参照するよ、って事だと思うんですけど、まあ僕の環境では何事も無く成功したパターンと、上記のように失敗したパターンの両方があってよくわかりません。
幸い、ミドルウェアのメンテナンスは特定のバージョンに依存したりしていなかったので、常に yum に提供されてる最新版を利用しています。なので、システムワイドの(いわゆるよく言われる「いままで利用していた」)ライブラリを参照するようにして解決しました。
解決した
[apache@localhost rails_root]$ bundle config build.nokogiri --use-system-libraries [apache@localhost rails_root]$ bundle update
メッセージには bundle install と書いてありますが、bundle に古いバージョンがある場合は、update でダイジョブです、特に消す必要もないです。
システムワイドのライブラリじゃなくて、nokogiri がインストールするライブラリ使いたい
知らんわからん、自分の環境の失敗したログ見て試してくれ(ゲッソリ)