RubyInstaller 2.2.1 и Rails - Рейк не может загрузить Nokogiri

Недавно я установил Ruby 2.2.1 с новым RubyInstaller в Windows. Чтобы проверить, все ли работает, я зашел в приложение rails и побежал bundle install, который работал нормально. Однако, когда я запускал тесты с помощью bunle exec rake test, я получил следующие ошибки:

rake aborted!
LoadError: cannot load such file -- nokogiri/nokogiri
D:/Dev/Grummle/config/application.rb:7:in `<top (required)>'
D:/Dev/Grummle/Rakefile:4:in `<top (required)>'
LoadError: cannot load such file -- nokogiri/2.2/nokogiri
D:/Dev/Grummle/config/application.rb:7:in `<top (required)>'
D:/Dev/Grummle/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)

Бундлер говорит, что это Using nokogiri 1.6.5. Кроме того, задача rake отлично работает с Ruby 2.1.5. Я ценю идеи о том, как решить проблему. Благодарю!:)

Ответ 1

Nokogiri еще не существует для Ruby 2.2 на окнах.

https://github.com/sparklemotion/nokogiri/issues/1256

По существу, nokogiri предоставляется предварительно скомпилированным для определенных рубиновых версий, а 2.2 еще не является одной из этих версий. компиляция nokogiri для окон чрезмерно сложна.

Ответ 2

Я думаю, что я работал над своей системой:

enter image description here

Я не знаю, что было сделано, чтобы заставить это работать, но я расскажу, что я сделал:

  • Проблема для Windows с Ruby 2.2+ и Nokogiri заключается в том, что камень не компилируется. Для работы Nokogiri требуется libXML, libxslt и libiconv. Они номинально скомпилированы в gem install, но по какой-либо причине это не происходит в Ruby 2.2+.

  • Поэтому, чтобы установить драгоценный камень (это точно такая же ситуация с mysql2 и rmagick), вам понадобятся системные зависимости (упомянутые выше).

  • От Ruby 2.2+ кажется, что камни будут "устанавливаться", даже если у них нет зависимости от системы (в отличие от отказа от установки, не создавая собственные расширения в предыдущих версиях). Новые ошибки времени выполнения включают cannot load such file -- mysql2/2.2/mysql2 (LoadError) и соответствующие для Nokogiri (cannot load such file -- nokogiri/nokogiri).

  • С учетом этого вы должны оценить, как драгоценные камни установлены и работают. Хорошим примером является mysql2 gem - для его установки вам нужно загрузить плагин MYSQL C-Connector, а затем ссылку на зависимость со следующим кодом: gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:\mysql-connector-path"'

  • С Nokogiri вам нужно иметь libXML, libiconv и libxslt в вашей системе. Я узнал, что от этот пост:

enter image description here

  1. Проблема возникает здесь. Я не уверен на 100%, что я сделал здесь, чтобы получить эту работу (даже временно). Я знаю, что я установил драгоценный камень Нокогири, а затем приступил к сборке драгоценного камня, используя ruby extconf.rb (это то, что делает камень в любом случае). Учитывая это, что я чувствую, я объясню, как это было сделано.

  2. Драгоценный камень обычно загружает библиотеки через установку. Он хранит их в папке ext/tmp/ports. Для моей системы загрузка libiconv была тем, что не позволило установке выполнить (ошибка около CPPFLAGS). Имея это в виду, я подумал, что если камень установлен, и если он пытается построить, было бы разумно установить зависимости.

  3. Таким образом, я работал над процессом ruby ext/extconf.rb, используя переключатель --use-system-libraries:

"...\nokogiri>ruby extconf.rb --platform=ruby -N --use-system-libraries --w ith-xml2-dir=C:\Users\Richard\Downloads\Ruby\libxml2-2.7.8.win32 --with-xml2-include=C:\Users \Richard\Downloads\Ruby\libxml2-2.7.8.win32\include --with-xml2-lib=C:\Users\Ric hard\Downloads\Ruby\libxml2-2.7.8.win32\lib --with-iconv-dir=C:\Users\Richard\Do wnloads\Ruby\iconv-1.9.2.win32 --with-iconv-include=C:\Users\Richard\Downloads\R uby\iconv-1.9.2.win32\include --with-iconv-lib=C:\Users\Richard\Downloads\Ruby\i conv-1.9.2.win32\lib --with-zlib-dir=C:\Users\Richard\Downloads\Ruby\zlib-1.2.5"

Я связал это с загрузкой вышеупомянутых библиотек (и некоторые из них не работали):

enter image description here

  1. У меня нет записи вывода указанной выше команды, но я уверен, что она построила расширения по мере необходимости, заканчивая тем, что компиляция "Makefile" была скомпилирована. Если доступно Makefile, вы можете использовать nmake (Windows 7.1 SDK) или make (MingW), чтобы запустить его. Я сделал это, и это, казалось, сработало.

  2. Я попытался загрузить сервер сегодня, и он, похоже, работал.

Это лучшее, что у меня есть сейчас.

Я могу ответить на комментарии и т.д. по мере необходимости.

Ответ 3

Пока они не выпустят надлежащий выпуск nokogiri для Ruby 2.2, я хотел бы поделиться с вами всеми, некоторые шаги, чтобы запустить его.

Кредиты для Пол Грант и Даниэль Риковски за помощь!

Во-первых, я должен сказать, что я запускаю Ruby 2.2.2p95 (32 бит) в Windows 8.1 (64 бит) и Rails 4.2.3 (и оболочку Cygwin)

1) удалите камень nokogiri (вам нужно будет подтвердить, потому что многие драгоценные камни зависят от него)

2) скачать nokogiri gem, составленный на ruby ​​2.2 от Paul Grant (для него это правда): https://github.com/paulgrant999/ruby-2.2.2-nokogiri-1.6.6.2-x86-x64-mingw32.gem

3) установил 32-битную версию локального gem (gem install --local path/to/gem) (в моем случае)

если вы попытаетесь загрузить рельсы здесь, bcrypt не удастся, поэтому, как опубликовано Даниэлем Риковски, вы можете построить свой bcrypt_ext.so файл.

4) убедитесь, что у вас есть DevKit на вашем пути (/devkit/bin и /devkit/mingw/bin)

5) перейдите в подпапку bcrypt ext/mri gem: (я использую Cygwin)

cd /cygdrive/c/Ruby22/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10-x86-mingw32/ext/mri

6) вызовите ruby extconf.rb (чтобы создать Makefile)

7) просто вызовите make

(он выведет много файлов, включая файл bcrypt_ext.so)

8) скопируйте папку bcrypt_ext.so в /cygdrive/c/Ruby22/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10-x86-mingw32/lib/2.2. Вы должны создать эту подпапку.

Что это! Теперь просто запустите сервер rails. Работаю как шарм!

Ответ 4

Последняя версия RC версии nokogiri поддерживает Ruby 2.2:

gem install nokogiri --pre

Ответ 5

Вы можете попробовать использовать кросс-скомпилированный драгоценный камень. Для меня хорошо работает.

  • Удалите все версии nokogiri, установленные ранее

    gem удалить nokogiri

  • Загрузите gem из https://github.com/paulgrant999/ruby-2.2.2-nokogiri-1.6.6.2-x86-x64-mingw32.gem

  • Установить с помощью одной из следующих команд:

    Для 64-битного Ruby: gem install --local nokogiri-1.6.6.2-x64-mingw32.gem

    Для 32-битного Ruby: gem install --local nokogiri-1.6.6.2-x86-mingw32.gem

  • Заблокировать версию nokogiri я вашего Gemfile:

    gem 'nokogiri', '1.6.6.2'