前言
卡了半天记录一下自己的解决过程,中间踩的坑没记录下来,可能有缺漏,仅供参考,希望能够有帮助,若有错误,也请大佬评论区指正。
今天作业练习虚拟机ruby脚本命令创建Redis Cluster集群,结果一直启动无效,进程显示无,遂发现是gem install redis这一步没反应,还以为它悄悄安装完了,结果是真没反应。
解决过程
换ruby版本
本来用的ruby-2.5.0,老师推荐用2.6.0,于是下载后解压、编译、安装,再执行gem install redis,好家伙,有反应了,但报错:“/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in require': cannot load such file -- openssl (LoadError)
”
提示表明当前的 Ruby 环境无法加载 openssl
库,而 openssl
对于 HTTPS 请求(比如使用 gem install
来安装 gem)是必要的。
于是中间试了很多方法,发现用下面这个方法直接搞定:
首先检查自己是否安装了openssl
openssl version
如果显示出版本,说明已经按照,没有就没安装
sudo yum install openssl-devel
结果是已经安装了,那就是Ruby 编译时没有找到OpenSSL,没链接上,于是我们先找到安装OpenSSL的位置,然后让Ruby配置文件配置好,重新编译ruby,就能连接上openssl(参考:编译的 Ruby 2.3.0 缺少 openssl 支持的解决方法 (已解决) · Ruby China (ruby-china.org))
首先,找到找到安装OpenSSL的位置
find /usr -name "openssl"
结果发现结果挺多的:
/usr/bin/openssl
/usr/lib64/python3.6/site-packages/cryptography/hazmat/backends/openssl
/usr/lib64/python3.6/site-packages/cryptography/hazmat/bindings/openssl
/usr/share/licenses/openssl
/usr/share/doc/openssl
/usr/share/bash-completion/completions/openssl
/usr/include/openssl
这一步openssl的路径选择,笔者记忆有点模糊,但依照chat的解释,可以认为“/usr”是openssl安装目录
于是进入ruby文件夹,配置文件、编译、安装...
cd ruby-2.6.0
./configure --with-openssl-dir=/usr
make
make install #需要以root身份运行
镜像源问题
然后再gem install redis,我是开着梯子下载的,如果有小伙伴遇到网络不通,可能是外网不好下载,可以试试换镜像源,参考:gem install没有反应 解决办法 - 欢喜等大年 - 博客园 (cnblogs.com)
网络域名配置
然后发现ERROR: Could not find a valid gem 'redis' (>= 0), here is why: Unable to download data from https://rubygems.org/ - no such name (https://rubygems.org/specs.4.8.gz),无法下载数据,检查一下是网络连接还是DNS域名无法识别的问题,我是ping外网发现ping www.baidu.com ping: www.baidu.com: Name or service not known,所以是域名解析的问题,打开/etc.resolv.conf文件
vim /etc/resolv.conf
添加 DNS 服务器(在文件中添加以下内容,以使用 Google 的公共 DNS 服务器)
nameserver 8.8.8.8
nameserver 8.8.4.4
保存退出, 在 vim
中,按 Esc
,然后输入 :wq
来保存并退出,然后网络ping通,gem install redis自然ok,Redis Cluster集群也能启动啦!