Я пытаюсь запустить драгоценный камень Ruby "Nokogiri" на машине Solaris, где у меня нет привилегий root. Что я сделал до сих пор:
- Я создал свою рубиновую версию (1.9.2p180) в своем домашнем каталоге.
- попытался установить nokogiri с помощью "gem install nokogiri"
Затем установка драгоценного камня выдала эту ошибку:
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
/home/bender/ruby/bin/ruby extconf.rb
checking for libxml/parser.h... yes
checking for libxslt/xslt.h... yes
checking for libexslt/exslt.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
-----
libiconv is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
Итак, я скачал и собрал libiconv в /home/myuser/work/libiconv.
$ ls /home/myuser/work/libiconv/
bin build include lib share
И передал местоположения в качестве аргументов для nokogiri:
gem install nokogiri -- --with-iconv-dir=/home/myuser/work/libiconv --with-iconv-include=/home/myuser/work/libiconv/include --with-iconv-lib=/home/myuser/work/libiconv/lib
Теперь гем строится, и ошибки не отображаются. Проблема в том, что когда я сейчас пытаюсь его использовать, например. в irb почему-то не загружается:
require 'nokogiri'
LoadError: ld.so.1: ruby: fatal: libiconv.so.2: open failed: No such file or directory - /home/myuser/ruby/lib/ruby/gems/1.9.1/gems/nokogiri-1.4.4/lib/nokogiri/nokogiri.so
from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/myuser/ruby/lib/ruby/gems/1.9.1/gems/nokogiri-1.4.4/lib/nokogiri.rb:13:in `<top (required)>'
from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:57:in `require'
from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:57:in `rescue in require'
from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
from (irb):1
from /home/myuser/ruby/bin/irb:12:in `<main>'
Но когда я ищу файл, который должен отсутствовать, он есть, а также доступен для чтения/исполнения:
ll /home/myuser/ruby/lib/ruby/gems/1.9.1/gems/nokogiri-1.4.4/lib/nokogiri/
total 66
...
-rwxr-xr-x 1 myuser group 370552 Jun 6 22:53 nokogiri.so
...
Хорошо, и это то, где я застрял.. файл есть, но не может быть открыт? Я попытался восстановить libiconv, который не имел никакого эффекта. Nokogiri не выдает никаких ошибок, указывающих на сбой процесса сборки. Поэтому я не знаю, как это решить, и Google тоже не может дать мне ответы. Я надеюсь, что кто-то здесь может дать мне несколько советов.
/редактировать
Я погуглил еще немного и нашел это сообщение, где кто-то использует ldd для отображения зависимостей. Когда я делаю то же самое для нокогири, он говорит:
ldd /home/myuser/ruby/bin/nokogiri
ldd: /home/myuser/ruby/bin/nokogiri: unsupported or unknown file type
Я предполагаю, что это потому, что это рубиновый файл, но если это актуально, я хочу упомянуть об этом.