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]()
-
Проблема возникает здесь.
Я не уверен на 100%, что я сделал здесь, чтобы получить эту работу (даже временно). Я знаю, что я установил драгоценный камень Нокогири, а затем приступил к сборке драгоценного камня, используя ruby extconf.rb
(это то, что делает камень в любом случае). Учитывая это, что я чувствую, я объясню, как это было сделано.
-
Драгоценный камень обычно загружает библиотеки через установку. Он хранит их в папке ext/tmp/ports
. Для моей системы загрузка libiconv
была тем, что не позволило установке выполнить (ошибка около CPPFLAGS
). Имея это в виду, я подумал, что если камень установлен, и если он пытается построить, было бы разумно установить зависимости.
-
Таким образом, я работал над процессом 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]()
-
У меня нет записи вывода указанной выше команды, но я уверен, что она построила расширения по мере необходимости, заканчивая тем, что компиляция "Makefile" была скомпилирована. Если доступно Makefile
, вы можете использовать nmake
(Windows 7.1 SDK) или make
(MingW), чтобы запустить его. Я сделал это, и это, казалось, сработало.
-
Я попытался загрузить сервер сегодня, и он, похоже, работал.
Это лучшее, что у меня есть сейчас.
Я могу ответить на комментарии и т.д. по мере необходимости.
Ответ 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'