安装 ruby-2.1.2:无法加载此类文件 -- openssl (LoadError)

Installing ruby-2.1.2: Cannot load such file -- openssl (LoadError)

使用 rvm 安装 ruby-2.1.2 时出现一些错误。我是 ruby 的新手,因此需要帮助。请告诉我

安装日志和其他相关信息在这里:log

根据问题描述中提供的日志,我的系统中安装了ruby2.1.2。但是,由于安装 errors.After 更改为 2.1.2,即 rvm use 2.1.2 并执行 ruby -r openssl -e 'puts OpensSSL::OPENSSL_VERSION' 而尝试使用 gem list 列出宝石时出现错误:

/Users/praveenk.k/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in require': cannot load such file -- openssl (LoadError) from /Users/praveenk.k/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in require'

Ruby <2.4 与 OpenSSL 1.1 不兼容(例如参见 [​​=14=])。

只是预感,但如果您使用的是 Mac + Homebrew,OpenSSL 1.0 最近已被删除,所以任何与 brew upgrade openssl 类似的东西都会成为垃圾。

有几种方法可以解决这个问题:

  1. 我通过 asdf 安装了旧的 Rubies 和 LibreSSL(这可能更安全,请参阅 https://security.stackexchange.com/questions/112545/what-are-the-main-advantages-of-using-libressl-in-favor-of-openssl):
$ openssl
OpenSSL> version
LibreSSL 2.8.3
  1. 编译并link您自己的 OpenSSL 1.0(或者在构建时将编译器标志设置为环境变量 Ruby -- https://rvm.io/rubies/installing
  2. 查看您系统的包管理器是否允许您访问 openssl 1.0 并使用它进行安装(最近正在帮助同事解决这个问题,不幸的是,我们目前无法找到适合自制软件的小桶)

可能还有比这更简单的事情;如果有人有想法,请随时发表评论或给出替代答案。

编辑

我个人 运行 使用其他一些软件解决了这个问题,发现这解决了它,因为旧的 SSL 版本仍然存在:

brew switch openssl 1.0.2s

只要 Homebrew 不"helpfully" 帮我清理它就应该可以工作。

工作示例

brew install rbenv/tap/openssl@1.0
rvm install 2.1.2 -C --with-openssl-dir=`brew --prefix openssl@1.0`

来自https://github.com/rvm/rvm/issues/4819#issuecomment-595644550

对于 debian 10:

sudo apt-get install -y libssl-dev

亚马逊Linux2,即使安装了openssl,也需要完整的开发包

yum install openssl-devel

我在 centos 7 中解决这个问题

$ openssl version -a


OpenSSL 1.0.2k-fips  26 Jan 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(8x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM

------------------------------------------------------------------------
OPENSSLDIR: "/etc/pki/tls" <- ************* COPY THIS PATH *************
------------------------------------------------------------------------

engines:  rdrand dynamic 

在下面的行中粘贴路径 how --with-openssl-dir param

$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=/etc/pki/tls" rbenv install 2.7.2

在 mac BigSur 上,我通过

修复了它
$ rvm pkg install openssl
$ rvm install 2.1.2 -C --with-openssl-dir=$HOME/.rvm/usr

或者你也可以试试

$ rvm pkg install openssl
$ CFLAGS="-Wno-error=implicit-function-declaration" rvm install 2.1.2 -C --with-openssl-dir=$HOME/.rvm/usr

在 Mac OS X Big Sur 上,安装 Ruby 2.3.2 和 RVM,修复是

brew install rbenv/tap/openssl@1.0
CFLAGS="-Wno-error=implicit-function-declaration" rvm reinstall ruby-2.2.5 --with-openssl-dir='/usr/local/opt/openssl@1.0'

参考在这里 -- https://github.com/rvm/rvm/issues/4889