Mac OS X Mavericksで”gem i nokogiri”失敗の解決方法

  • 216
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

環境

Homebrewにて下記をインストール

  • rbenv
  • ruby-build

rbenv にて ruby 2.1.2 をインストール
gem の管理に bundler を gem にてインストールしてあります。

OS X version 10.9.4

解決策

解決の前に

"nokogiri" をインストールしていた場合はアンインストールする。

$ gem uninstall nokogiri

nokogiriインストールの条件

次の3つのファイルをインストールします。

libxml2, libxslt, libiconv

インストールには Homebrew にてインストールしてください。

Homebrew を最新にする

$ brew doctor       #インストール内容が最新かチェック
$ brew update       #ログにupdateの記述があったときに行う
$ brew upgrade      #利用可能なアップデート版をアップグレード

必須ファイルをインストールする

$ brew tap homebrew/dupes                   #リポジトリの追加を行います
$ brew install libxml2 libxslt libiconv     #必須ファイルのインストール
$ brew link --force libxml2            #meltediceさんからのフィードバック
$ brew link --force libxslt            #meltediceさんからのフィードバック
Homebrewから libiconv formulaから除外されたのでtapを使ってリポジトリを追加してからインストールを行います。

因に、 libiconv をHomebrew以外の方法でインストールされる方はバージョンが nokogiri の公式サイトの記述よりあがっているのでインストールの際はご注意を。

nokogiriをインストールする

brew でインストールされた3つのファイルを使って nokogiri をインストールします。
パス設定とインストールは次の通りです。(修正後の記述です。追記を参照ください。)

$ gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

上記コマンドにより

$ nokogiri 1.6.2.1      #左記バージョンがインストールされます

ちなみにライブラリを設定しないで行うと注意事項が表示されて終了します。

Macの場合は、システムでRuby 2.0.0がインストールされているのでそこに付随しているファイルが古いのでしょう。
それらを使うとwarningが表示されることになると思います。

参考&引用

下記の記述を参考にさせていただきました。
リンク先のアドレスと参考内容を引用させていただきます。

Setting NOKOGIRI_USE_SYSTEM_LIBRARIES=1 before actually installing the gem did the trick for me.

Summarising:

If previously installed, uninstall the gem:
$ gem uninstall nokogiri

Use Homebrew to install libxml2, libxslt and libiconv if needed:
$ brew install libxml2 libxslt libiconv

Install the gem specifying the paths to the libraries to be linked against:

$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

こちらも試しましたが $ brew link ..... の部分でwarning が表示されその後の $ gem install xxxxx でもwarning が表示されました。

warning では、リンクされている場所に問題があるようだったので今回の解決方法で行いました。

こちらには環境変数の設定について記述があります。

【 追 記 】

nokogiriのソースを眺めていて環境変数とインストールするときのビルドオプションがひょっとすると同列の意味をなすのではないか?
っという疑問があり試してみたところ、正常にインストールできたのでその点について修正します。

$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 #この記述がなくても大丈夫です
# 修正をする前のコマンド
#
$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

記事中のコマンドは修正をしておきました。

 --use-system-libraries

肝は、上のビルドオプションがあれば大丈夫です。

【 新バージョンのインストール時の注意点 】

meltedice さん のコメントの通り上書きで新バージョンをインストールする場合は、事前の必要ファイルなどを--force--オプションを付けてインストールされると良いと思います。

nokogiri 1.6.3.1

【 Bundler を使用してインストールしている場合は下記を 】

$ bundle config build.nokogiri --use-system-libraries
$ bundle install

【 libxml2 による問題 】

ソースには以下の様な記述が

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.

libxml2はバージョンが2.6.21 - 2.9.0 と限定的に使用されています。
ライブラリに依存している為その部分がFixされないとインストールできてもコケル場合があります。

【 その他の問題 】

インストールされているnokogiriのバージョンは古いですが参考になると思います。

また、Homebrew のアップデートも行って各formulaを最新にしてください。もしかすると、fomulaに記述されている内容が古いファイルを落としている可能性もあります。