Centos 6.5在使用yum -y install ruby 安装ruby的时候,版本号会低于2.2.2. ,在搭建redis集群环境时,执行gem install redis命令时提示以下错误信息:
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.
Centos6.5 yum源默认是1.8.0版本,查看当前ruby版本:
# ruby --version // 结果ruby 1.8.0.0p648 (2013-12-16) [x86_64-linux]
解决方法:
一、在电脑翻墙的情况下,可以采用RVM方式, ,需要先curl,再安装RVM,之后安装大于等于2.2.2版本的ruby即可。
1.安装curl
# yum -y install curl
2.安装RVM
# curl -L get.rvm.io | bash -s stable
3.获得秘钥
# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
4.继续执行
# curl -sSL https://get.rvm.io | bash -s stable
5.RVM安装完成
使用source让当前shell读入路径为/usr/local/rvm/scripts/rvm的shell文件并依次执行文件中的所有语句,并重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录
# source /usr/local/rvm/scripts/rvm
6.查看Ruby可用版本
# rvm list known
这里选择2.3.7版本安装,等待时间比较长。
# rvm install 2.3.7
7.使用安装的2.3.7版本
# rvm use 2.3.7
8、设置默认版本
# rvm use 2.3.7 --default
9、卸载之前的2.0.0版本
# rvm remove 2.0.0
10、查看ruby版本
# ruby --version
版本号为 ruby 2.3.7p456
接着返回继续执行gem install redis命令j即可。
二、下载ruby安装包进行升级。
openssl-1.0.1s下载,提取码:8q3d
需要用到的资源,从上面链接下载
tar -zxvf ruby-2.3.1.tar.gz
./configure -prefix=/usr/local/ruby
make && make install
cd /usr/local/ruby
cp bin/ruby /usr/local/bin
cp bin/gem /usr/local/bin
在配置 redis-3.1.1 群集中,使用gem install 安装 ruby redis 接口时报:
# [root@localhost src]# gem install redis --version 3.0.0
# # 由于源的原因,可能下载失败,就手动下载下来安装
[root@localhost src]# gem install /usr/local/src/redis-3.2.1.gem
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
原因:
缺少openssl,需要安装openssl包,我现在这里来安装一个openssl-1.0.1s.tar.gz。
解决方法步骤
1.解压在/usr/local/src目录下,进入/usr/local/src/openssl-1.0.1s目录准备安装:
[root@localhost src]# tar -xzvf openssl-1.0.1s.tar.gz
[root@localhost src]# cd openssl-1.0.1s
[root@localhost openssl-1.0.1s]# ./config -fPIC --prefix=/usr/local/openssl enable-shared [root@localhost openssl-1.0.1s]# ./config -t
[root@localhost openssl-1.0.1s]# make && make install
openssl的配置文件必须要配置-fPIC参数,如果没有该参数下面的安装中会出现问题!
安装完成,可以检测一下是否安装成功:
[root@localhost openssl-1.0.1s]# openssl version
2.进入ruby源码[/usr/local/src/ruby-2.3.1]目录下的ext/openssl 目录:
[root@localhost openssl]# ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for assert.h... yes
checking for openssl/ssl.h... yes
.............................................中间略.............................................
checking for EVP_CTRL_GCM_GET_TAG in openssl/evp.h... yes
creating extconf.h
creating Makefile
成功。
3.接下来并且将ruby 源码目录下的include目录软链接到 / 目录下:
[root@localhost openssl]# ln -s /usr/local/ruby-2.3.1/include /
接着再执行make,如果在配置openssl时没有-fPIC参数时就会出现如下错误
[root@localhost openssl]# make
gcc -shared -o openssl.so ossl_x509.o ossl_x509cert.o ossl_x509crl.o ossl_pkcs7.o ossl_cipher.o ossl_pkey_dh.o ossl_ssl_session.o ossl_x509attr.o ossl_x509ext.o ossl_ocsp.o ossl_asn1.o ossl_x509name.o ossl_x509revoked.o ossl_rand.o ossl_pkcs12.o ossl_x509store.o ossl_ssl.o ossl.o ossl_digest.o ossl_config.o ossl_pkcs5.o ossl_bio.o ossl_pkey_dsa.o ossl_pkey.o ossl_x509req.o ossl_pkey_ec.o ossl_hmac.o openssl_missing.o ossl_ns_spki.o ossl_pkey_rsa.o ossl_engine.o ossl_bn.o -L. -L/usr/local/ruby/lib -Wl,-R/usr/local/ruby/lib -L/usr/local/ssl/lib -Wl,-R/usr/local/ssl/lib -L. -rdynamic -Wl,-export-dynamic -lssl -lcrypto -lrt -ldl -lcrypt -lm -lc
/usr/bin/ld: /usr/local/ssl/lib/libssl.a(s2_meth.o): relocation R_X86_64_32 against `a local symbol'
can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [openssl.so] Error 1
有配置-fPIC参数时就继续走下去:
[root@localhost openssl]# make
compiling ossl_pkey_dsa.c
compiling openssl_missing.c
compiling ossl_x509name.c
compiling ossl_pkey_rsa.c
.............................................中间略.............................................
compiling ossl_bn.c
compiling ossl.c l
inking shared-object openssl.so
再执行
[root@localhost openssl]# make install
4.回过头来,这时候我们已经把配置集群遇到的各种问题已经解决好了,再次使用gem install 安装 ruby redis 接口:
gem install -l ./redis-3.3.0.gem
gem list --check redis gem
[root@localhost src]# gem install /usr/local/src/redis-3.0.0.gem
Successfully installed redis-3.0.0
Parsing documentation for redis-3.0.0
Installing ri documentation for redis-3.0.0
Done installing documentation for redis after 0 seconds
WARNING: Unable to pull data from 'https://rubygems.org/': SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://rubygems.org/specs.4.8.gz)
1 gem installed
可以看到这时ruby redis接口已经安装成功了;