"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
).
Это означает, что вы должны убедиться, что у вас есть файлы в вашей системе и запустить компилятор для их установки.
В приведенной выше документации должно быть показано, как это сделать.