Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is a robust installation process for Nokogiri (on Ubuntu)?

I tried to install Nokogiri on my Ubuntu 12.04 system, and got an error that said "libxslt is missing", but the libxslt-dev and libxml2-dev are installed.

Is there a robust installation process? How can I check the links to dependent libraries?

I used RVM, and the RVM pkg is installed too.

ERROR:  Error installing nokogiri:
    ERROR: Failed to build gem native extension.

        /home/victor/.rvm/rubies/ruby-1.9.3-p125/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... yes
checking for xmlParseDoc() in -lxml2... yes
checking for xsltParseStylesheetDoc() in -lxslt... no
-----
libxslt is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/victor/.rvm/rubies/ruby-1.9.3-p125/bin/ruby
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --with-iconv-dir
    --without-iconv-dir
    --with-iconv-include
    --without-iconv-include=${iconv-dir}/include
    --with-iconv-lib
    --without-iconv-lib=${iconv-dir}/lib
    --with-xml2-dir
    --without-xml2-dir
    --with-xml2-include
    --without-xml2-include=${xml2-dir}/include
    --with-xml2-lib
    --without-xml2-lib=${xml2-dir}/lib
    --with-xslt-dir
    --without-xslt-dir
    --with-xslt-include
    --without-xslt-include=${xslt-dir}/include
    --with-xslt-lib
    --without-xslt-lib=${xslt-dir}/lib
    --with-libxslt-config
    --without-libxslt-config
    --with-pkg-config
    --without-pkg-config
    --with-libxml-2.0-config
    --without-libxml-2.0-config
    --with-libiconv-config
    --without-libiconv-config
    --with-xml2lib
    --without-xml2lib
    --with-xsltlib
    --without-xsltlib


Gem files will remain installed in /home/victor/.rvm/gems/ruby-1.9.3-p125@dradis/gems/nokogiri-1.5.4 for inspection.
Results logged to /home/victor/.rvm/gems/ruby-1.9.3-p125@dradis/gems/nokogiri-1.5.4/ext/nokogiri/gem_make.out
    enter code here
like image 926
Reader Avatar asked Jun 13 '12 20:06

Reader


1 Answers

I have also experienced the same problem with rvm, even though I had done the following, as per documentation:

  • sudo apt-get install libxslt-dev libxml2-dev
  • rvm pkg libxml2 and rvm pkg libxslt

The only way I could get this solved was, after a lengthy investigation:

  • Uninstall the ruby installation: rvm remove 1.9.3
  • Delete all libxslt* and libxml2* libs from ~/.rvm/usr/lib if you had previously done rvm pkg ...
  • Reinstall ruby: rvm install 1.9.3

Reinstalling after the apt-get commands seems to be the only way of getting this to work. Also, ensuring the libs installed with rvm pkg don’t interfere helped.

When everything else fails...

If everything else fails and you absolutely need the gem installed, you can also rebuild nokogiri by applying a simple patch — provided that you have all build tools installed, and with the caveat that this will install the latest and potentially unstable code:

  • git clone git://github.com/sparklemotion/nokogiri
  • get patch from this gist and save it as x86_64.patch in the nokogiri folder.
  • Apply patch: patch -p1 < x86_64.patch
  • Rebuild: rake native gem — this should build the gem in the pkg/ folder
  • Install the gem using gem install pkg/nokogiri-<version>-x86_64-linux.gem
like image 70
Sébastien Le Callonnec Avatar answered Nov 07 '22 23:11

Sébastien Le Callonnec