私はあらゆる種類の研究を行い、多くの異なることを試しました。私はこの質問に何度も答えられたことを知っていますが、提案された解決策のどれも私のために機能していません。
Lionにアップグレードした後、Rubyでセグメンテーションエラーが発生しています。のこぎりだとかなり確信しています。そこで、Homebrew経由でlibxml2をインストールしました。 brew link libxml2
。次に、そのバージョンのライブラリを使用してNokogiriを再インストールしました。
証明のため:
$ nokogiri -v
# Nokogiri (1.5.0)
---
warnings: []
nokogiri: 1.5.0
Ruby:
version: 1.9.2
platform: x86_64-darwin11.0.0
description: Ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
engine: Ruby
libxml:
binding: extension
compiled: 2.7.8
loaded: 2.7.8
Nokogiriをgemfileの先頭に既に含めており、環境ファイルにもNokogiriを必要としました。なぜその警告が表示されるのか、私にはわかりません。
適切なバージョンのlibxml2を確実にロードするための提案やアイデアはありますか?
朝の大部分をこの警告に費やしました。この修正は、Mac OS Lionを使用している人向けです。上記の修正を使用して
bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
libxml2をMacPorts経由でインストールしたSnow Leopard用です。
Lionでは、libxml2はbootstrapプロセスの一部としてロードされます。どのlibxml2 Nokogiriが指しているかに関係なく、libxml2のLionシステムのデフォルトライブラリは実行時に使用されます。Lionはlibxml2.2.7を使用します。 3は/usr
で見つかりました(/usr/local
ではありません)。
他の多くの場所で述べたように、警告を無視することができます。私のように、警告があなたを狂わせたら、あなたはこれをすることができます:
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
これは、RubyおよびRailsが、libxml2をロードしたシステムと、環境パスからlibxml2を使用したコマンドラインを使用して、libxml2がロードされる方法により多くあることを示唆しています。とにかく、これは私のためにエラーを沈黙させます。
もう一度言います。これはライオン専用です。以前の修正はSnow Leopardで機能します。
これで答えは終わりです。ここで読むのをやめてください。
OK、あなたは読むのをやめなかった...まあ...
推奨しません!!!!!!
あなたは警告されました。 /usr/lib
にあるlibxml2を無効にすることで、Mac OSXがbootstrap=でlibxml2ライブラリをロードしていることを確認できます。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 再起動中)。 bootstrapが発生するのを見ることができます。低いと見れば、libxml2をロードできないというエラーがスローされ、動作が停止します。
電源をオフにしてから再度オンにします。今度はリカバリモードで起動します(ホールド Command-R またはホールド Option リカバリディスクを選択します)。復旧モードでターミナルを開きます(utilities/terminal
)。 HDに/usr/lib
をマウントし(/Volumes/Macintosh\ HD/usr/lib
を試してください)、libxml2ファイルをコピーします。再起動するとすべてが正常になります。
Nokogiriをgem install nokogiri
でインストールした場合、gem pristine nokogiri
を実行してgemのC拡張を再コンパイルすることでこの警告を解決できます。
Nokogiriをbundle install
でインストールした場合は、bundle exec gem pristine nokogiri
を実行して、Bundlerがインストールした場所のgemのC拡張を再コンパイルすることで、この警告を解決できます。
Homebrewとbundlerを使用している場合にこれを修正するには、gem 'nokogiri'
先頭へGemfile
の場合、次のコマンドを実行します。
gem uninstall nokogiri libxml-Ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle install
バンドラーを使用しない場合は、代わりに次のコマンドを実行します。
gem uninstall nokogiri libxml-Ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
アプリでは、nokogiriが最初に必要を使用して、ロードするライブラリの指定に失敗したgemによってロードされたlibxml2の古いシステムバージョンではなく、動的なlibxml2ライブラリをアプリにロードする必要があります。
これはどれも私にとってはうまくいきませんでした。
Brewを使用してlibxml2を新しいバージョン(2.7.8)にインストールしました。これにより、nokogiriがコンパイルされ、その後の問題が発生しました。解決策、それを削除してからビルドし、必要に応じてインストールします。
うまくいったのは次のとおりです。
brew uninstall libxml2
(以前にインストールした場合)gem uninstall nokogiri
gem install nokogiri
brew install libxml2
(オプション)Mountain Lionにアップデートした後の解決策(私にとって)ははるかに簡単でした:
gem uninstall nokogiri
# (and ignore the warnings about dependencies)
gem install nokogiri
上記のpatrickmcgrawからのコメントによると、単にGemfileの最初のエントリとしてnokogiriを置くだけでうまくいきました。元のコメントが埋もれているので、私はそれを別の回答としています。
source 'http://rubygems.org'
gem 'nokogiri'
gem 'Rails', '3.0.20'
etc...
Gemのインストール後にシステムライブラリを更新したように見えるため、Nokogiriを更新する必要があります。現在のlibバージョンを使用するには:
gem install nokogiri -- --use-system-libraries
Bundlerには、デフォルトのビルド場所を設定するオプションがあります。たとえば、macportsを介してlibxml2をインストールした場合:
$ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
これとbundle install
、警告は消えました。
nokogiri wiki にビルドオプションを設定するための便利な例もいくつかあります。
私は同様の問題を抱えていて、この方法で解決しました:
私の場合、RVMがインストールされており、@ globalおよび@project gemセットがありました。両方ともnokogiriがインストールされていて、そのうちの1つは異なるlibxmlでビルドされていました。
両方を再構築すると(これを行う理由があります)、問題は解決しました。
お役に立てれば..
gem install libxml-Rubyは私を助けます
gem uninstall nokogiri
bundle #install nokogiri again
「libxml2が見つかりません」で失敗した場合。 「/usr/bin/gcc-4.2 ...」を使用しようとしているgems/nokogiri-1.5.0/ext/nokogiri/mkmf.logが表示される場合、/ usr/bin/gcc-4.2が欠落しています。
溶液:
Sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
前:
$ ll /usr/bin/gcc*
lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
後:
$ ll /usr/bin/gcc*
lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
lrwxr-xr-x 1 root wheel 12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc
Libxml2 libxsltが本当に欠落している場合は、
brew update
brew install libxml2 libxslt
brew link libxml2 libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle
参考までに、私はMountain Lionをbrewとbundlerで実行しています。
このメッセージがあり、nokogiriがgemソースから入手可能なバージョンで最新でない場合は、単にbundle update nokogiri
新しいコードを取得して再コンパイルします。エラーはなくなるはずです。
自分でこれに遭遇しました(OS X Lion 10.7.5)。私の正確なメッセージは:NokogiriはLibXMLバージョン2.8.0に対して構築されましたが、動的に2.7.3をロードしました
ここで言及したいくつかの提案を試しましたが、どれも機能しませんでしたが、これはうまくいきました:
gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
説明は、「どのlibxml2 Nokogiriが構築されたかに関係なく、Lionシステムのデフォルトのlibxml2(ブートストラップでロードされる)が使用されるためです」。
実際には、2つのバージョンのlibxmlをインストールしました。1つはソースから、もう1つはRPMからです。
以下は私の完全なソリューションです
ソースを(ソースディレクトリから)アンインストールしました
Sudo make uninstall
バンドルを削除する
rm -rf ~/.bundle ~/.bundler
LD(Sudoではなくルートとしてこれを行う必要がある場合があります)
Sudo ldconfig
その後、バンドルを再インストールしました
bundle install
OS:マーベリック10.9.3
Ruby 1.9.3
警告:NokogiriはLibXMLバージョン2.9.1に対して構築されましたが、動的に2.9.0をロードしました
私の解決策:
gem uninstall nokogiri
brew update
cd /usr/local
brew versions libxml2
git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0
brew install libxml2
bundle install or gem install nokogiri -v "1.5.11"
この助けを願っています