无法要求 openssl,安装 OpenSSL 并重建 ruby​​(首选)或使用非 HTTPS 源

Posted

技术标签:

【中文标题】无法要求 openssl,安装 OpenSSL 并重建 ruby​​(首选)或使用非 HTTPS 源【英文标题】:Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources 【发布时间】:2016-09-17 02:55:30 【问题描述】:

我正在尝试安装jekyll,但遇到了错误。我正在运行 Mac OS X 10.11.4 (El Capitan)。

$gem install jekyll
ERROR : While executing gem ... (Gem::Exception)
        Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
$gem source -l
https://ruby.taobao.org
$which openssl
/usr/local/bin/openssl

欢迎您提出如何解决此错误的建议。

【问题讨论】:

您可能想为您的问题提供一些背景信息,而不是仅仅在您的操作系统上使用单行代码转储代码。您是否看过这篇帖子:第一个错误? ***.com/a/25186429/4475605 嗨阿德里安,我不是 OSX 10.10 中的错误。但是我将系统更新到 OSX10.11,我遇到了错误。 @CharsDavy 您可能想更改已接受的解决方案 我能够使用rvm pkg install opensslrvm install 2.5.3 --with-openssl-dir=$rvm_path/usr 中的命令修复openssl 问题,如this post 中所述 【参考方案1】:

方法一(安装OpenSSL)

在您的终端 (OSX) 中键入所有这些命令,以确保您已完成所有操作:

rvm get stable
brew update
brew doctor
brew install openssl
rvm install ruby-2.4 (or whatever version)
rvm use ruby-2.4 (or whatever version)
rvm gemset create jekyll
gem install jekyll

最后,在安装 Jekyll(或其他 gem)之前,您需要在编译 Ruby 之前安装 OpenSSL!

方法2(重新安装Ruby)

较新版本的 OSX 已弃用 openSSL。

您需要重新安装 Ruby!

带有 OpenSSL 的 RVM

rvm reinstall 2.3.0 --with-openssl-dir=/usr/local/opt/openssl

使用最新的 RVM 版本

rvm get stable
rvm reinstall ruby-2.3.0

自制软件和 OpenSSL

brew install openssl
rvm reinstall 2.3.0 --with-openssl-dir=`brew --prefix openssl`

【讨论】:

我遇到了 ruby​​ 2.4.1 的问题。我安装了 openssl,方法 2 为我解决了这个问题。我用 rvm get stable 更新了 rvm 本身,并用 rvm rvm reinstall ruby-2.4.1 重新安装了 ruby​​。 我在 ruby​​ 2.4.2 中遇到了这个问题。我将更新 rvm 然后使用 dir 参数--with-openssl-dir 重新安装的步骤结合起来。我建议您也运行which openssl 以了解在您的 rvm 命令中使用哪个目录。【参考方案2】:

较新版本的 OSX 弃用了 openSSL,导致许多依赖项被破坏。您需要重新安装 ruby​​,但要准确指定 openSSL 库的位置。如果您使用的是rvm,那么它看起来像:

rvm reinstall 2.3.0 --with-openssl-dir=/usr/local/opt/openssl

如果您使用的是自制软件,那么您的库所在位置的快速快捷方式是:

brew install openssl
rvm reinstall 2.3.0 --with-openssl-dir=`brew --prefix openssl`

【讨论】:

天哪!这让我发疯了。我刚买了一台 10.12.6 的新笔记本电脑,我的常规教程没有用! 对于仍然卡住的任何人,这仅在 rvm 命令中的 ssl 目录与您运行 $ which openssl 时获得的路径匹配时才有效 这不适用于 OS X 10.13.6 和 Ruby 2.5.3。我尝试使用`brew --prefix openssl``which openssl`'actual/path/to/openssl' 作为选项的参数。没有任何效果。我无法安装 gem。 终于让它工作了。我必须同时实现这个答案和下面@guapolo 的答案。这两种解决方案本身都行不通。 一个值得考虑的替代方案(特别是在重新开始或使用新计算机时)是切换到rbenv。将 RVM 的 github 星数增加三倍,简单且可预测。这个问题真的很难解决,特别是对于 Ruby 版本 2.3,所以如果你需要支持它们,我强烈建议切换。 (仅供参考,需要卸载 rvm)。【参考方案3】:

您只需要设置此环境变量,以便您的编译器具有正确的 openssl 库路径(如果在 macOS 上使用 Homebrew,请尝试 brew info openssl 以查看此信息):

$ export LDFLAGS=-L/usr/local/opt/openssl/lib
$ export CPPFLAGS=-I/usr/local/opt/openssl/include
# For pkg-config to find this software you may need to set:
$ export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig

然后重新安装你的 ruby​​ (rvm reinstall ruby-version)

【讨论】:

这对我有用。但是,当我重新安装时必须指定 OpenSSL 目录:rvm reinstall 2.5.1 --with-openssl-dir=`brew --prefix openssl` 在我的 OSX 机器上【参考方案4】:

考虑到与openssl相关的其他答案,我们在某些情况下尝试以超级用户身份执行时会看到相同的错误,如下所示:

filipe@FILIPE:~$ sudo gem install bundler 
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

没有超级用户权限,我们可以看到不同的行为,一个成功的,如下:

filipe@FILIPE:~$  gem install bundler 
Fetching: bundler-1.14.6.gem (100%)
Successfully installed bundler-1.14.6
Parsing documentation for bundler-1.14.6
Installing ri documentation for bundler-1.14.6
Done installing documentation for bundler after 4 seconds
1 gem installed

【讨论】:

【参考方案5】:
brew install openssl

brew info openssl # do the suggested options
$ export LDFLAGS=-L/usr/local/opt/openssl/lib
$ export CPPFLAGS=-I/usr/local/opt/openssl/include
# For pkg-config to find this software you may need to set:
$ export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig

rvm reinstall <version> --with-openssl-dir=`brew --prefix openssl`

【讨论】:

以上是关于无法要求 openssl,安装 OpenSSL 并重建 ruby​​(首选)或使用非 HTTPS 源的主要内容,如果未能解决你的问题,请参考以下文章

Gmssl与Openssl版本兼容安装方式,解决gmssl安装后,openssl无法使用的问题

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

安装openssl-devel

致命错误 C1083:无法打开包含文件:“openssl/opensslv.h”

无法通过 asdf (Ubuntu 18.04.1) 使用 openssl 安装 Erlang

openssl windows编译 32位&64位