Ruby 在 NET::HTTP 中找不到 Openssl

Ruby Openssl not being found in NET::HTTP

我收到以下错误:

/Users/user_name/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/net/https.rb:124:in `use_ssl=': uninitialized constant Net::HTTP::OpenSSL (NameError)

所以,我打开了 https 文件并更改了一件事,看看会发生什么,我这样做了:

@ssl_context = ::OpenSSL::SSL::SSLContext.new

如果你看不到,我在方法里把::加到OpenSSL::SSL::SSLContext.new

def use_ssl=(flag)

然后问题就消失了。

现在显然我不能直接编辑 ruby 库的源代码所以我将以下内容添加到我的脚本顶部作为补丁:

module Net
  class HTTP

    def use_ssl=(flag)
      flag = (flag ? true : false)
      raise IOError, "use_ssl value changed, but session already started"\
          if started? and @use_ssl != flag
      if flag and not @ssl_context
        @ssl_context = ::OpenSSL::SSL::SSLContext.new
      end
      @use_ssl = flag
    end
  end
end

但是我收到一个错误:

scripts/get_social_data.rb:27:in `use_ssl=': uninitialized constant OpenSSL (NameError)

尽管已经完成:

require 'openssl'

在我的脚本的顶部。

为什么 OpenSSL 不存在,即使我需要它?

我猜我遗漏了一些东西,但老实说我看不到它。

编辑:

嗯,我注意到 Openssl(我正在维护这个项目)在 gemfile 中,我很确定它不应该在那里,我卸载了它但它仍然无法工作。

好的,所以,在浏览互联网并尝试各种方法后,我找到了解决问题的方法,我不得不使用以下命令重新安装 ruby 1.8.7-p375:

RUBY_CONFIGURE_OPTS=--with-openssl-dir= rbenv install 1.8.7-p375

至少可以在 osx 上找到 opensslDir,并像这样用自制软件安装:

brew list openssl

你会得到一堆目录,只需复制所有目录中的位,它可能看起来像这样:

/usr/local/Cellar/openssl/1.0.2h