web-dev-qa-db-ja.com

「必須」:そのようなファイルをロードできません-「Railsサーバー」の実行中に「nokogiri \ nokogiri」(LoadError)

DevKitを搭載したWindows 8.1でRuby 2.2.1のクリーンインストールを実行しています。インストール後、次を実行します。

gem install Rails
rails new testapp
cd testapp
Rails server

他のすべてはデフォルトのままにします。

サーバーを実行する代わりに、エラーメッセージが表示されると、プロセスは最後の行で失敗します

in 'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError)

それは毎回起こり、私はそれを修正するために見つけたすべてのものを見て回ってみましたが、今のところ何もうまくいきませんでした。

ここでの問題は何ですか?また、簡単なテストRailsアプリを動作させるにはどうすればよいですか?

59
Shef

Nokogiriは、WindowsでRuby 2.2をまだサポートしていません。次のリリースが予定されています。 https://github.com/sparklemotion/nokogiri/issues/1256 を参照してください

Nokogiriは、Windowsでのネイティブビルド(devkitなど)をサポートしていません。代わりに、ビルド済みDLLを含むgemを提供します。

参加したり、devkitビルドサポートのトピックで見たいディスカッションがあります: https://github.com/sparklemotion/nokogiri/issues/119

63
Mike Dalessio
  1. まず、現在使用しているノコギリのバージョンをアンインストールします。

    gem uninstall nokogiri
    
  2. ダウンロード Nokogiri 1.6.6.2(x64) または Nokogiri 1.6.6.2(x86)

  3. 以下を使用して、このバージョンをローカルにインストールします。

    gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x64-mingw32.gem
    

    または、32ビットRubyを実行している場合:

    gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x86-mingw32.gem
    

    パスは、ファイルのダウンロード先によって異なる場合があります。

Ruby bin\Rails serverを使用してサーバーを再起動してみてください。動作するはずです。

38
Julio Elixir

Mike DalessiosとJuliosの回答を組み合わせて、Windows 10でRuby 2.2を使用してNokogiriを実行しました。

  1. Nokogiriのgithubリポジトリ でNokogiriの最新バージョンを探します。
  2. gem uninstall nokogiriを実行します。
  3. gem "nokogiri", ">= 1.6.7.rc"をGemfileに追加します。
  4. bundle installを実行します。
  5. バンドルがあるバージョンでNokogiriをロックしている場合は、bundle update nokogiriを実行します。
33
Pascal

enter image description here

修正する

  1. バンドルインストール(Nokogiriファイルを取得)
  2. Ruby_dir\lib\Ruby\gems\2.2.0\gems\nokogiri-1.6.6.2\ext\nokogiriを参照します
  3. extconf.rbを開きます
  4. dir_config('iconv').any? or pkg_config('libiconv')#376に追加します
  5. MegaからMinGW64およびMSYSフォルダーをダウンロード
  6. それらをWindowsのPATHに追加します(Devkitパス参照を削除します-動作しません)
  7. libxml2libxslticonvライブラリをダウンロード (または here
  8. ダウンロードしたライブラリを参照してRuby extconf.rb --platform=Ruby --n --use-system-librariesを実行します
  9. makeを実行します
  10. make installを実行します

手順

バンドルインストール

最初のステップはbundleです。

これにより、事前にパッケージ化されたコンパイラを実行せずに、nokogiri gemがマシンに配置されます(Windowsではほとんど機能しません)。

これにより、Nokogiriはinstalledとして表示されます。

enter image description here

参照

nokogiriフォルダーを参照して、ext/nokogiri/extconf.rbを見つけます。

enter image description here

Open extconf.rb

... dir_config('iconv').any? or pkg_config('libiconv')#376に追加します

enter image description here

標準のNokogiriはlibxml2を含むiconvに "rely"をインストールします-明示的に定義する必要があります。そうしないとiconv.h is missingエラーが発生します。

ツールチェーンを追加

これにはdevkitを使用しないでください-機能しません。

MinGWが必要です:

enter image description here

正確なMinGW64およびMSYS64フォルダを圧縮しました on Mega (key:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

enter image description here

PATHに追加

これにより、gccおよびmakeへのアクセスが許可されます(両方が必要です)。

enter image description here

パスからdevkit refを削除し、次を追加します。

  • MINGW64_PATH/bin
  • MSYS64_PATH/bin

ライブラリをダウンロード

Megaにライブラリを追加しました:

enter image description here

ここで解凍します:

enter image description here

すべてのライブラリは this source からのものです。

実行extconf.rb

システムにライブラリがインストールされたら、Ruby extconf.rbを実行してビルドを構成できます。

enter image description here

32ビット

Ruby extconf.rb --platform=Ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/iconv-1.14-win32-x86 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxslt-1.1.28-win32-x86

64ビット

#64 Ruby extconf.rb --platform=Ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/iconv-1.14-win32-x86_64 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxslt-1.1.28-win32-x86_64

make

enter image description here

これにより、「Error 1 (ignored)」と表示されている限り、エラー/警告が発生する可能性があります。

それに続いて、make installを使用します。

enter image description here

次に、Railsインストールを参照し、Rails sを実行します。

enter image description here


説明

コンテキストを与えるには:

Windows上のRuby 2.2+はextensionsNokogiriが必要とするものをコンパイルしません。

Gemのextensionsは、gemが使用する追加の依存関係(ライブラリ)です。

Gemをinstallするときに構築されます:

enter image description here


拡張機能

拡張機能がないため、Nokogiriの実行が妨げられています。

拡張機能はgemのextフォルダーに存在します( 詳細についてはこちらをご覧ください ):

enter image description here

Mysql2RMagickPGSQLNokogiriなどall拡張機能/ライブラリを使用します。

そのため、Windowsでは、gemのインストール時にカスタムスイッチ(--with-opt-dir)を使用する必要があります。これにより、Ruby /シェル/(cmd)にgemのファイルをビルドするために必要なlib/includeディレクトリーが与えられます( PATH の動作と同等です)。

Linux/Macでは、これらのディレクトリはそれぞれのパッケージマネージャー(brew/apt-get)で管理されます。 Windowsにはこれがないため、拡張機能を手動でインストールする必要があります。

Windowsには標準のライブラリセットがないため、自分でダウンロードする必要があります。また、自分でbuildする必要があります(注意が必要です)。

Nokogiriインストールの修正は、適切なライブラリとビルドツールを使用してgemをインストールすることです。


ビルド

Ruby 2.2+との違いは、gemが例外を表示せずに「インストール」することです。 Railsが(notロード(nokogiri/nokogiri.soエラー)を検出するためだけにインストールされたと思います。

つまり、システムにファイルがあることを確認し、コンパイラを実行してインストールする必要があります。

上記のドキュメントは、その方法を示しているはずです。

6
Richard Peck