Ruby 和“您必须使用 OpenSSL 支持重新编译 Ruby 或更改 Gemfile 中的源代码”

Posted

技术标签:

【中文标题】Ruby 和“您必须使用 OpenSSL 支持重新编译 Ruby 或更改 Gemfile 中的源代码”【英文标题】:Ruby and "You must recompile Ruby with OpenSSL support or change the sources in your Gemfile" 【发布时间】:2013-02-19 03:55:38 【问题描述】:

使用 rvm 我将我的 ruby​​ 升级到 1.9.3-p392,还添加了 2.0.0,每当我尝试使用此版本时,当我运行我的 bundle 命令时都会收到此错误。

Could not load OpenSSL.
You must recompile Ruby with OpenSSL support or change the sources in your Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL using RVM are
available at rvm.io/packages/openssl.

我遵循了几个不同的说明来解决这个问题。我已尝试删除版本并使用 rvm 选项安装它

--with-openssl-dir=$HOME/.rvm/usr

我已经安装了带有 rvm 和 macports 的 OpenSSL。两者都没有解决问题。我什至使用以下方法更改了 ssl 证书的文件位置:

export SSL_CERT_FILE=/Users/DarkLord/.rvm/usr/ssl/cert.pem

无论我做什么,我都会继续收到错误消息。 有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

我在处理 Ruby 2.2.3 应用程序时遇到了这个问题。

我之前已经卸载了我机器上的 MySQL 数据库服务器,因为我不需要它。但是,我仍然需要 mysql2 gem,因为我的应用程序正在连接到另一个应用程序的 MySQL 数据库以提取数据。

但是,当我尝试运行 bundle 命令时,我得到了错误:

无法加载 OpenSSL。 您必须使用 OpenSSL 支持重新编译 Ruby,或者将 Gemfile 中的源代码从“https”更改为“http”。使用 RVM 使用 OpenSSL 进行编译的说明是 可在 rvm.io/packages/openssl 获得。

我是这样解决的

当我在我的机器及其库上卸载 MySQL 数据库服务器 时,删除了 libssl-dev 库导致该问题。

首先我运行以下命令重新安装ruby,因为我使用rvm安装它:

rvm reinstall ruby-2.2.3

这引发了一个错误:

使宝石组 ruby​​-2.2.3 原始...................................... ....../- .'command gem pristine --extensions mysql2 --version 0.5.3' 失败,您需要手动修复这些 gem。 . 运行“__rvm_with ruby​​-2.2.3 gemset_pristine”时出错, 请阅读/home/promisepreston/.rvm/log/1630094455_ruby-2.2.3/gemset.pristine-ruby-2.2.3.log

接下来,我尝试安装mysql2 gem:

gem install mysql2

然后我遇到了这个错误:

构建原生扩展。这可能需要一段时间... 错误:安装 mysql2 时出错: 错误:无法构建 gem 原生扩展。 mysql 客户端丢失。您可能需要 'sudo apt-get install libmariadb-dev'、'sudo apt-get install libmysqlclient-dev' 或 'sudo yum install mysql-devel',然后再试一次。

最后,我使用命令安装了mysql客户端库:

sudo apt-get install libmysqlclient-dev

注意:这也会同时安装libssl-dev 库。

一切正常。

就是这样。

【讨论】:

【参考方案2】:

macOS 卡塔利娜

brew install rbenv/tap/openssl@1.0
rvm reinstall 2.3.8 --with-openssl-dir=/usr/local/opt/openssl@1.0

【讨论】:

【参考方案3】:

我在我的 Gemfile 中指定了一个更新的 Ruby 版本,然后运行 ​​bundle install。现在一切都好。

【讨论】:

【参考方案4】:

根据上面@Purplejacket 的评论,新的方法如下:

rvm autolibs homebrew
rvm install 2.1.1
rvm use 2.1.1

这要容易得多。

【讨论】:

感谢更新。很高兴有更简单的方法来解决这个问题。【参考方案5】:

就我而言:

问题:安装ruby-2.3.1后,我运行命令bundle install,然后出现错误。

解决方法:

我首先在我的机器上安装了 OpenSSL$ brew install openssl

然后,用 openssl 重新安装了我需要的 ruby​​ 版本(2.3.1)。

$ rvm reinstall 2.3.1 --with-openssl-dir=/usr/local/opt/openssl

这解决了我的问题!

【讨论】:

【参考方案6】:

以下步骤对我有用。

首先确保通过运行brew install openssl 安装openssl,然后使用rvm 重新安装ruby 版本,但是这一次,您必须传递with-opt-dir 标志指向您机器上安装openssl 的位置(使用命令which openssl 找到这个位置)。

rvm install 1.9.3-p392 --with-openssl-dir=/usr/local/opt/openssl

【讨论】:

【参考方案7】:

在我的情况下:

 1. brew install openssl
 2. rvm install ruby-2.6.0

bundle install 因此错误而失败。问题是 openssl 是全局设置的,所以我必须通过显式设置 openssl 目录来安装新的 ruby​​ 版本。

所以我要做的是:

 1. rvm reinstall ruby-2.6.0 --with-openssl-dir=/usr/local/opt/openssl
 2. rvm reload

假设usr/local/opt/openssl 是它的安装位置。

之后bundle install 运行成功。

警告,当我使用这条路径 /usr/local 尝试此命令时,就像一些建议的答案一样,它不起作用。

【讨论】:

另外,如果您只运行 rvm reinstall ruby-2.2.9 而没有 --with-openssl-dir= 部分,那么这将不起作用! 如果您不知道您的 openssl 路径在哪里,您可以通过运行 brew --prefix openssl 来获取它。 结合答案,我推荐rvm reinstall ruby-2.3.7 --with-openssl-dir=`brew --prefix openssl` 作为最终解决方案。【参考方案8】:

这对我有帮助:

rvm reinstall 2.5

brew tap raggi/ale
brew install openssl-osx-ca
brew services start openssl-osx-ca

在此处找到此解决方案:https://github.com/raggi/openssl-osx-ca#readme

【讨论】:

【参考方案9】:

在 macOS 10.14、Ruby 2.5.3 和 OpenSSL 1.0.2n 上,这对我有用:

./configure --with-openssl --with-openssl-dir=/usr/local/ssl

但我只是在尝试错误消息告诉我的内容:

*** Following extensions are not compiled:
openssl:
    Could not be configured. It will not be installed.
    /Users/brian/Desktop/Ruby/ruby-2.5.3/ext/openssl/extconf.rb:97: OpenSSL library could not be found. You might want to use --with-openssl-dir=<dir> option to specify the prefix where OpenSSL is installed.
    Check ext/openssl/mkmf.log for more details.
*** Fix the problems, then remove these directories and try again if you want.
make[1]: *** [note] Error 1

【讨论】:

【参考方案10】:

这有助于我在 Mac 上安装 1.9.3-head:

rvm get latest    
brew install openssl    
rvm reinstall 1.9.3-head --with-openssl-dir=`brew --prefix openssl`

【讨论】:

对我来说仍然有效,在 Mac OS 10.13.6 上尝试重新安装 ruby​​ 2.2.0 这对我来说适用于 Ruby 2.3.3 和 macOS 10.14.3。 这应该是正确的答案,因为设置了动态 openssl-dir 参数【参考方案11】:

这对我有用:

rvm get stable

brew install libyaml

rvm pkg install openssl

rvm install ruby-2.0.0 --with-openssl-dir=$HOME/.rvm/usr

rvm use ruby-2.0.0

所有学分都转到https://coderwall.com/p/tptocq

【讨论】:

rvm pkg install openssl 导致 rvm 版本 1.24.7 被弃用。如果您键入rvm autolibs,它将显示一个带有一些替代选项的帮助屏幕。我个人使用了选项#4,它是rvm autolibs homebrew,然后是rvm uninstall 2.0.0-p353,然后是rvm install ruby-2.0.0-p353 --with-openssl-dir=$HOME/.rvm/usr。这不太奏效,但它生成了一个 .log 文件,其中包含一些执行 brew doctor 和取消链接一些库的说明。然后重新运行最后一个 rvm install 命令。【参考方案12】:

为了让它再次工作,我必须安装自制软件并将我的 mac 端口移开。然后在删除 1.9.3-p392 和 2.0.0-p0 后执行以下操作:

rvm get head --autolibs=3
rvm install 1.9.3 --with-opt-dir=/usr/bin
rvm install 2.0.0

我的 mac 端口和 openssl 以及 make 和 configure 出现了一些问题。这是我能够让 rvm 再次安装 ruby​​ 而不会出现 openssl 问题或 make/configure 问题的唯一方法。

【讨论】:

这对我也有用。尝试了各种建议,但只有这个有效。谢谢! 没问题很高兴能帮到你。【参考方案13】:

根据以下问题: How to tell which openssl lib is actually being used by an RVM-installed ruby

从 Ruby 1.9.3 开始,选项 --with-openssl-dir=... 似乎不再有效。我试过了

rvm install 1.9.3 --with-opt-dir=/usr/local --with-openssl

它成功了。

【讨论】:

我刚刚尝试运行它,但出现以下错误:'Error running 'make -j4''

以上是关于Ruby 和“您必须使用 OpenSSL 支持重新编译 Ruby 或更改 Gemfile 中的源代码”的主要内容,如果未能解决你的问题,请参考以下文章

在创建新的 Rails 应用程序时

Ruby 1.8 和 Ruby 1.9 有啥区别

ruby和ruby ee

ruby和前端

ruby 在Ruby中拆分和连接文件

ruby Ruby对象和类