Gem 关于在 CentOS 上安装 nokigiri 的问题 需要各位大大的帮忙

grj1046 · 2013年12月31日 · 最后由 grj1046 回复于 2014年03月11日 · 3384 次阅读

在 ubuntu 上安装 nokigiri 很顺利,但是在 CentOS 上安装时各种问题。 使用

gem install nokogiri

安装 nokigiri 的时候回去自动下载 libxml2-2.8.0,而且是从源码安装的,但是报错, 我使用 yum 命令把 libxml2 libxml2-devel libxslt libxslt-devel 安装上后再安装 nokogiri,还是会自动去下载 libxml2-2.8.0 这个包,然后去编译执行,继续报错。 所以我自己把 libxml2-2.8 安装上去了(报错原因是 zlib 版本的问题),终于把 libxml2 给安装上去了,安装时指定的 prefix 是/usr/local/libxml2,所以我使用命令

# gem install nokogiri -- --with-xml2-include=/usr/local/libxml2/include/libxml2/

继续安装(参考的是这个:http://wuhuizhong.iteye.com/blog/1239790)但是他还是会继续下载 libxml2-2.8.0 这个包,表示很无奈了,求各位谁遇到过这种情况帮下忙,先谢谢各位了。

附上报错信息:

# gem install nokogiri -- --with-xml2-include=/usr/local/libxml2/include/libxml2/
Building native extensions with: '--with-xml2-include=/usr/local/libxml2/include/libxml2/'
This could take a while...
ERROR:  Error installing nokogiri:
        ERROR: Failed to build gem native extension.

    /usr/local/rvm/rubies/ruby-2.0.0-p247/bin/ruby extconf.rb --with-xml2-include=/usr/local/libxml2/include/libxml2/
Extracting libxml2-2.8.0.tar.gz into tmp/x86_64-redhat-linux/ports/libxml2/2.8.0... OK
Running 'configure' for libxml2 2.8.0... OK
Running 'compile' for libxml2 2.8.0... ERROR, review 'tmp/x86_64-redhat-linux/ports/libxml2/2.8.0/compile.log' to see what happened.
*** 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
        --without-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=/usr/local/rvm/rubies/ruby-2.0.0-p247/bin/ruby
/usr/local/rvm/gems/ruby-2.0.0-p247/gems/mini_portile-0.5.2/lib/mini_portile.rb:265:in `block in execute': Failed to complete compile task (RuntimeError)
        from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/mini_portile-0.5.2/lib/mini_portile.rb:257:in `chdir'
        from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/mini_portile-0.5.2/lib/mini_portile.rb:257:in `execute'
        from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/mini_portile-0.5.2/lib/mini_portile.rb:69:in `compile'
        from /usr/local/rvm/gems/ruby-2.0.0-p247/gems/mini_portile-0.5.2/lib/mini_portile.rb:109:in `cook'
        from extconf.rb:101:in `block in <main>'
        from extconf.rb:119:in `call'
        from extconf.rb:119:in `block in <main>'
        from extconf.rb:109:in `tap'
        from extconf.rb:109:in `<main>'


Gem files will remain installed in /usr/local/rvm/gems/ruby-2.0.0-p247/gems/nokogiri-1.6.1 for inspection.
Results logged to /usr/local/rvm/gems/ruby-2.0.0-p247/gems/nokogiri-1.6.1/ext/nokogiri/gem_make.out

建议看下tmp/x86_64-redhat-linux/ports/libxml2/2.8.0/compile.log能不能找到错误信息

#1 楼 @chunlea 这个报错原因我可以猜到,是因为编译 libxml2 的时候未指定 zlib 报错的,我学 linux 时间不长,请问一下这个文件该如何查看。 thx

#2 楼 @grj1046 官网文档上有提到 CentOS,建议参考下。http://nokogiri.org/tutorials/installing_nokogiri.html

Ubuntu 用得好好的弄 CentOS 做啥。

#4 楼 @Rei 开发用的 Ubuntu 部署是 CentOS

最后没有解决 重装系统后能够正常安装了

重装系统?搞这么大,一般解法去这里看上下文信息,能找到。

Results logged to /usr/local/rvm/gems/ruby-2.0.0-p247/gems/nokogiri-1.6.1/ext/nokogiri/gem_make.out

#7 楼 @wikimo 那个文件看过了,是编译 libxml2-2.8.0 的时候没通过,然后手动编译 libxml2 的时候报的 zlib 的错误,这两个文件最终被我编译通过了,但是安装的时候还是回去自动下载 libxml2 并编译。另一个编译文件 tmp/x86_64-redhat-linux/ports/libxml2/2.8.0/compile.log 我不知道该怎么去看,不知道文件的路径该怎么着。

重装系统后 nokogiri 能正常安装了,只是 Passenger 的 nginx 模块又编译不通过,所以将服务端换成了 unicorn。现在一切正常。

#8 楼 @grj1046 1.6.1 我没试过,1.5.2 我也 centos,没有问题。

1. 安装 libxml2 出现问题,需要重新打包安装 zlib libxslt 时指定安装路径 zlib 在./configure 时指定--prefix=/usr/local/zlib
libxslt 在./configure 时--prefix=/usr/local/libxslt 2. 然后修改文件 zlib 和 libxslt 的 Makefile ,在 CFLAGS 后面添加 -fPIC 参数,执行 make,然后
执行

make install

3.重新编译 libxml2,执行以下语句

./configure --prefix=/usr/local/libxml2 --with-zlib=/usr/local/zlib/

然后修改文件 Makefile ,找到 CFLAGS 参数,在它后面添加 -fPIC 参数,然后执行 make,最
后 make install 3. 然后安装 nokoriri 时指定 libxml2 和 libxslt 的安装路径

OKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --with-xml2-dir=/usr/local/libxml2 --with-xslt-dir=/usr/local/libxslt

#12 楼 @crosspass good 我把 ruby 解析器充 Passenger 改成了 unicorn,因此不用纠结这个问题了,你说的这个方案就留待有缘人尝试了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册