Как использовать nokogiri из Jruby в Windows?
Вопрос
Я получаю следующую ошибку при попытке использовать Nokogiri с Jruby в Windows 7
D:\code\h4>jruby -e "require 'rubygems'; require 'nokogiri'"
D:/jruby-1.3.1/bin/../lib/ruby/1.8/ffi/library.rb:18:in `ffi_lib': Could not ope
n any of [xml2, xslt, exslt] (LoadError)
from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri/ffi/libxml.rb:5
from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri/ffi/libxml.rb:31:in `require'
from D:/jruby-1.3.1/bin/../lib/ruby/site_ruby/1.8/rubygems/custom_requir
e.rb:31:in `require'
from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri.rb:10
from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri.rb:36:in `require'
from D:/jruby-1.3.1/bin/../lib/ruby/site_ruby/1.8/rubygems/custom_requir
e.rb:36:in `require'
from -e:1
Кажется, проблема с несовместимостью собственных расширений (libxml2) с Jruby, однако я нашел обходной путь здесь, но не смог найти libexslt.so и я не уверен, куда это поместить.Есть ли у кого-нибудь успешный опыт использования jruby + windows + nokogiri + libexslt?ТИА
Решение
Найденный вами обходной путь предназначен для системы UNIX;файл .so представляет собой загружаемый модуль, аналогичный DLL в Windows.И вы не можете использовать softlink в Windows (the ln -s
команда), так что это неприменимо в вашей ситуации.
Тем не менее, у вас есть та же проблема, что nokogiri не может найти ваш библиотеки libxml2, libxslt и libexslt.Поскольку я не использую JRuby или nokogiri, я действительно не уверен, как это будет работать, но мое лучшее предположение таково:
Скорее всего, вам понадобятся двоичные файлы Windows (DLL) из libxml2 и libxslt как минимум;могут потребоваться другие связанные двоичные файлы Windows, которые доступны по адресу в том же месте.Вы захотите, чтобы библиотеки DLL были установлены где-нибудь по вашему пути, а еще лучше в том же каталоге, что и ваш исполняемый файл JRuby (выглядит как "D:/jruby-1.3.1/bin").(Если это не сработает, возможно, может сработать Java-нативная форма библиотек, таких как libxmlj, но я сомневаюсь в этом - вам, вероятно, нужны родные для Windows.)
Я ожидаю, что это поможет вам на вашем пути к работе.
Другие советы
Теперь существует чистая версия Java, которая также может работать в Windows.
gem install nokogiri --pre
Найдено здесь
https://github.com/tenderlove/nokogiri/wiki/pure-java-nokogiri-for-jruby
Это правда, что вам нужны библиотеки DLL xml2 / libxslt в вашем path.
Однако я счел необходимым обновиться до jruby-1.4.0RC2 (я полагаю, для некоторых улучшений FFI).
Кроме того, необходимо обновиться до последней версии nokogiri 1.3.3 и вручную применить следующую фиксацию:
http://github.com/tenderlove/nokogiri/commit/0555c69e70083a6368b563f18da2c8d5416515cc
ИЛИ установите nokogiri из github trunk.
Я надеюсь, что это полезно.
Полезные справочные ссылки: