私は朝の大部分をこの警告に取り組んで過ごしました。この修正は、Mac OSLionを使用しているユーザーを対象としています。上記の修正を使用して
bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
MacPorts経由でlibxml2がインストールされたSnowLeopard用です。
Lionでは、libxml2がブートストラッププロセスの一部としてロードされます。どのlibxml2Nokogiriが指しているかに関係なく、libxml2のLionシステムのデフォルトライブラリが実行時に使用されます。Lionは/usr
(ではなく/usr/local
)にあるlibxml2.2.7.3を使用します。
他の多くの場所で述べたように、警告は無視してかまいません。私のように、警告があなたを夢中にさせるなら、あなたはこれをすることができます:
bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
興味深いことに、nokogiri -v
コマンドラインで入力すると、反対の警告が表示されます。
WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8
これは、libxml2のロード方法にさらに多くのことがあることを示唆しており、RubyとRailsはシステムにロードされたlibxml2を使用し、コマンドラインは環境パスからlibxml2を使用します。とにかく、これは私にとってエラーを沈黙させます。
もう一度言いますが、これはライオン専用です。以前の修正はSnowLeopardで機能します。
これで答えは終わりです。ここで読むのをやめてください。
OK、あなたは読むのをやめませんでした...まあ...
推奨されません!!!!!!
あなたは警告されました。にあるlibxml2を無効にすることで、MacOSXがブートストラップにlibxml2ライブラリをロードしていることを確認でき/usr/lib
ます。すべてのバージョンのコピーのような何かをするlibxml2*.dylib
にはlibxml2*.dylib.old
(私のマシン上でこれだったlibxml2.2.7.3
、libxml2.2
とlibxml2
)。
これを行った後、Nokogiriを実行してもエラーは発生しません。これは、ロードされたlibxml2が見つからず、環境パスをたどり、最終的にはで見つかるlibxml2.2.7.8
ため/opt/local
です。
ただし、古いlibxmlファイルをコピーして戻すことはできません。これは、OSがブートストラップにロードされたlibxml2を必要とするためです。
電源をオフにしてから再度オンにすると、マシンがブリックされます。ログイン画面がハングし、ハングしてハングします。シングルユーザーモードで電源をオフにしてから再度オンにします(再起動中はCommand-Sを押し続けます)。ブートストラップが発生するのを見ることができます。低くて見よ、それはlibxml2をロードできないというエラーをスローし、その後動作を停止します。
電源を切り、再度電源を入れます。今回はリカバリモードで起動します(ホールドCommand-RまたはホールドOptionしてリカバリディスクを選択します)。リカバリモードで、ターミナル(utilities/terminal
)を開きます。/usr/lib
HDにマウントして(try /Volumes/Macintosh\ HD/usr/lib
)、libxml2ファイルをコピーして戻します。再起動すると、すべて問題ありません。
brew remove --force libxml2
bundle config --delete build.nokogiri
gem uninstall nokogiri libxml-ruby
bundle