Techioz Blog

「gem」と「bundle」が同じ libxml2 を使用しないのはなぜですか?

概要

イライラのループに陥っているようです。プロジェクトを「バンドルインストール」しようとしていますが、次のような結果になります。

An error occurred while installing nokogiri (1.6.6.2), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.6.2'` succeeds before bundling.

そこで私はそれを試してみます:

$ gem install nokogiri -v '1.6.6.2'
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.6.6.2
Parsing documentation for nokogiri-1.6.6.2
Done installing documentation for nokogiri after 2 seconds
1 gem installed

大丈夫です!ただし、「bundle install」を実行すると、最初に「gem install nokogiri -v ‘1.6.6.2’」を取得してインストールする必要があると再度表示されます。ああああ。

mkmf.log ファイルは、これが libxml2 の問題であることを示唆しています (驚いたことに)。

conftest.c:3:10: fatal error: 'libxml/xmlversion.h' file not found
#include <libxml/xmlversion.h>
         ^
1 error generated.
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: #include <libxml/xmlversion.h>
4: 
5: #if LIBXML_VERSION < 20621
6: #error libxml2 is way too old
7: #endif
/* end */

したがって、libxml2 を (「sudo find / -name libxml2」で) 検索すると、次のディレクトリが表示されます。これらはすべて、少なくとも 2.9.0 以降であるようです。

ということは、libxml2が見つからないことが問題なのでしょうか?もしそうなら、nokogiri がすでにインストールされていることを認識するには、または少なくとも「gem install」と同じ方法でインストールできるように、bundle install を取得するにはどうすればよいでしょうか?この解決策を見つけたいと思っていますが、将来トラブルシューティングできるように、「水面下」で何が起こっているのかを知りたいと思っています。

解決策

Mac OS X でこれらのコマンドを実行したところ、問題は解決されました。

brew unlink gcc-4.2      # you might not need this step
gem uninstall nokogiri
xcode-select --install
gem install nokogiri