'require': cannot load such file — 'nokogiri\nokogiri' (LoadError) when running `rails server`

后端 未结 4 1213
忘掉有多难
忘掉有多难 2020-11-27 03:07

I\'m running a clean install of Ruby 2.2.1 on Windows 8.1 with DevKit. After the installation I run:

gem install rails
rails new testapp
cd testapp
rails ser         


        
相关标签:
4条回答
  • 2020-11-27 03:32

    I got Nokogiri running with Ruby 2.2 on Windows 10 with a mix of Mike Dalessios and Julios answer:

    1. Look for the latest version of Nokogiri in Nokogiri's github repo.
    2. Run gem uninstall nokogiri.
    3. Add gem "nokogiri", ">= 1.6.7.rc" to your Gemfile.
    4. Run bundle install.
    5. Run bundle update nokogiri if bundle has locked Nokogiri at some version.
    0 讨论(0)
  • 2020-11-27 03:43

    Nokogiri doesn't support Ruby 2.2 on Windows yet. The next release will. See https://github.com/sparklemotion/nokogiri/issues/1256

    Nokogiri doesn't support native builds (e.g. with devkit) on Windows. Instead it provides gems containing prebuilt DLLs.

    There's a discussion which you may want to join or watch on the topic of devkit build support here: https://github.com/sparklemotion/nokogiri/issues/1190

    0 讨论(0)
  • 2020-11-27 03:43
    1. First, uninstall the version of Nokogiri you currently have with:

      gem uninstall nokogiri
      
    2. Download Nokogiri 1.6.6.2 (x64) or Nokogiri 1.6.6.2 (x86)

    3. Install this version locally using:

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

      or if you're running 32bit Ruby:

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

      The path may differ depending on where you downloaded the file to.

    Try to start the server again using ruby bin\rails server, and it should work.

    0 讨论(0)
  • 2020-11-27 03:49

    Fix

    1. Bundle install (gets Nokogiri files)
    2. Browse to ruby_dir\lib\ruby\gems\2.2.0\gems\nokogiri-1.6.6.2\ext\nokogiri
    3. Open extconf.rb
    4. Add dir_config('iconv').any? or pkg_config('libiconv') to #376
    5. Download MinGW64 & MSYS folders from Mega
    6. Add them to PATH in Windows (remove Devkit path refs - it doesn't work)
    7. Download libxml2,libxslt, iconv libraries (or here)
    8. Run ruby extconf.rb --platform=ruby --n --use-system-libraries referencing downloaded libraries
    9. Run make
    10. Run make install

    Steps

    Bundle Install

    First step is to bundle.

    This will put the nokogiri gem on your machine without running the pre-packaged compiler (which mostly doesn't work in Windows).

    This will show Nokogiri as installed:

    Browse

    Browse to the nokogiri folder, to find ext/nokogiri/extconf.rb:

    Open extconf.rb

    ... and add dir_config('iconv').any? or pkg_config('libiconv') to #376

    Standard Nokogiri installs "rely" on the libxml2 inclusion of iconv - we need to explicitly define it, otherwise iconv.h is missing errors will occur.

    Add Toolchain

    Don't use devkit for this - it doesn't work.

    You need MinGW:

    I have zipped my exact MinGW64 and MSYS64 folders on Mega (key: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

    Add to PATH

    This gives access to gcc & make (both required):

    Remove the devkit ref from your path, and add the following:

    • MINGW64_PATH/bin
    • MSYS64_PATH/bin

    Download Libs

    I have added the libs to Mega:

    You will unzip them here:

    All the libs are from this source.

    Run extconf.rb

    Once libs are on your system, you can run ruby extconf.rb to configure the build:

    32bit

    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

    64bit

    #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

    This may create errors / warnings, as long as it says "Error 1 (ignored)", it should be okay.

    Following that, use make install:

    Then browse to your Rails installation and run rails s:


    Explanation

    To give context:

    Ruby 2.2+ on Windows doesn't compile the extensions Nokogiri requires.

    The extensions of a gem are the extra dependencies (libraries) it uses.

    They are built when you install the gem:


    Extensions

    Lack of extensions is preventing Nokogiri from running.

    Extensions exist in the ext folder of a gem (you can read about them here):

    Mysql2,RMagick,PGSQL, Nokogiri etc all use extensions/libraries.

    This is why - on Windows - you have to use custom switches (--with-opt-dir) when installing the gem. This gives Ruby / the shell / (cmd) the required lib / include directories required to build the gem's files (it's the equivalent of how PATH works).

    On Linux/Mac, these directories are managed with the respective package managers (brew/apt-get). Windows does not have this, so you have to install the extensions manually.

    Because Windows does not have a standard set of libraries, you have to download them yourself. You also have to build them yourself (which is tricky).

    The fix for Nokogiri install is to use the right libraries and build tools to get the gem installed.


    Build

    The difference with Ruby 2.2+ is the gem will "install" without showing any exceptions. You think it has installed, only to find Rails does not load (hence the nokogiri/nokogiri.so error).

    This means you have to make sure you have the files on your system, and run the compiler to install them.

    The above documentation should show you how to do that.

    0 讨论(0)
提交回复
热议问题