"require": невозможно загрузить такой файл - "nokogiri\nokogiri" (LoadError) при запуске `rails server`

Я запускаю чистую установку Ruby 2.2.1 на Windows 8.1 с помощью DevKit. После установки я запускаю:

gem install rails
rails new testapp
cd testapp
rails server

оставить все остальное по умолчанию.

Процесс завершается с ошибкой в ​​последней строке, когда вместо запуска сервера появляется сообщение об ошибке

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

Это происходит каждый раз, и я огляделся и попробовал все, что нашел, чтобы исправить это, но ничего до сих пор не сработало.

В чем проблема и как мне получить простое приложение Rails для работы?

Ответ 1

Nokogiri не поддерживает Ruby 2.2 в Windows. Следующий выпуск будет. См. https://github.com/sparklemotion/nokogiri/issues/1256

Nokogiri не поддерживает встроенные сборки (например, с devkit) в Windows. Вместо этого он предоставляет драгоценные камни, содержащие предварительно созданные библиотеки DLL.

Здесь вы можете обсудить или посмотреть на тему поддержки devkit: https://github.com/sparklemotion/nokogiri/issues/1190

Ответ 2

  • Сначала удалите версию Nokogiri, которую вы сейчас используете:

    gem uninstall nokogiri
    
  • Загрузить Nokogiri 1.6.6.2 (x64) или Nokogiri 1.6.6.2 (x86)

  • Установите эту версию локально, используя:

    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, и он должен работать.

Ответ 3

Я получил Nokogiri, работающий с Ruby 2.2 на Windows 10, с ответом Майка Далессиоса и Джулиоса:

  • Найдите последнюю версию Nokogiri в Nokogiri github repo.
  • Запустите gem uninstall nokogiri.
  • Добавьте gem "nokogiri", ">= 1.6.7.rc" в свой Gemfile.
  • Запустите bundle install.
  • Запустите bundle update nokogiri, если пучок заблокировал Nokogiri в некоторой версии.

Ответ 4

введите описание изображения здесь

Fix

  • Установка пакета (получает файлы Nokogiri)
  • Перейдите к ruby_dir\lib\ruby\gems\2.2.0\gems\nokogiri-1.6.6.2\ext\nokogiri
  • Открыть extconf.rb
  • Добавить dir_config('iconv').any? or pkg_config('libiconv') в #376
  • Загрузить MinGW64 и MSYS папки из Mega
  • Добавьте их в PATH в Windows (удалите Devkit path refs - он не работает)
  • Загрузить libxml2, libxslt, iconv библиотеки (или здесь)
  • Запустить ruby extconf.rb --platform=ruby --n --use-system-libraries ссылку на загруженные библиотеки
  • Запустить make
  • Запустить make install

Действия

Установка пакета

Первый шаг - расслоение.

Это поместит драгоценный камень nokogiri на ваш компьютер, не запуская предварительно упакованный компилятор (который в основном не работает в Windows).

Это покажет Nokogiri как установленный:

введите описание изображения здесь

Обзор

Перейдите в папку nokogiri, чтобы найти ext/nokogiri/extconf.rb:

введите описание изображения здесь

Открыть extconf.rb

... и добавьте dir_config('iconv').any? or pkg_config('libiconv') в #376

введите описание изображения здесь

Стандартный Nokogiri устанавливает "полагаться" на libxml2 включение iconv - нам нужно явно определить его, иначе iconv.h is missing будут возникать ошибки.

Добавить Toolchain

Не используйте Devkit для этого - он не работает.

Вам нужно MinGW:

введите описание изображения здесь

Я скопировал свои точные MinGW64 и MSYS64 папки на Mega (клавиша: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

введите описание изображения здесь

Добавить в PATH

Это дает доступ к gcc и make (оба требуются):

введите описание изображения здесь

Удалите ссылку Devkit с вашего пути и добавьте следующее:

  • MINGW64_PATH/бен
  • MSYS64_PATH/бен

Загрузить Libs

Я добавил библиотеки в Mega:

введите описание изображения здесь

Вы распакуете их здесь:

введите описание изображения здесь

Все библиотеки из этот источник.

Выполнить extconf.rb

Как только библиотеки libs находятся в вашей системе, вы можете запустить ruby extconf.rb для настройки сборки:

введите описание изображения здесь

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

введите описание изображения здесь

Это может привести к ошибкам/предупреждениям, если в нем указано "Error 1 (ignored)", это должно быть хорошо.

После этого используйте make install:

введите описание изображения здесь

Затем перейдите к установке Rails и запустите rails s:

введите описание изображения здесь


Объяснение

Чтобы дать контекст:

Ruby 2.2+ в Windows не компилирует расширения, требуемые Nokogiri.

Расширения драгоценного камня - это дополнительные зависимости (библиотеки), которые он использует.

Они создаются при установке драгоценного камня:

введите описание изображения здесь


Extensions

Отсутствие расширений предотвращает запуск Nokogiri.

Расширения существуют в папке ext драгоценного камня (вы можете прочитать о них здесь):

введите описание изображения здесь

Mysql2, RMagick, PGSQL, nokogiri и т.д. все используют расширения/библиотеки.

Вот почему - в Windows - при установке драгоценного камня вы должны использовать специальные переключатели (--with-opt-dir). Это дает Ruby/shell/(cmd) требуемые каталоги lib/include, необходимые для сборки файлов gem (это эквивалентно тому, как PATH работает.)

В Linux/Mac эти каталоги управляются с помощью соответствующих менеджеров пакетов (brew/apt-get). В Windows этого нет, поэтому вам нужно установить расширения вручную.

Поскольку Windows не имеет стандартного набора библиотек, вы должны загружать их самостоятельно. Вы также должны сами создавать их (что сложно).

Исправление для установки Nokogiri - использование правильных библиотек и создание инструментов для установки gem.


Строить

Разница с Ruby 2.2+ заключается в том, что драгоценный камень "установит", не показывая никаких исключений. Вы считаете, что он установлен, только для того, чтобы найти Rails, загружается не (следовательно, ошибка nokogiri/nokogiri.so).

Это означает, что вы должны убедиться, что у вас есть файлы в вашей системе и запустить компилятор для их установки.

В приведенной выше документации должно быть показано, как это сделать.