gpt4 book ai didi

ruby - "uninitialized constant OpenSSL::PKey::EC"来自 CentOS 6.6 上的 Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 07:31:49 25 4
gpt4 key购买 nike

我有一个使用 openid_connect gem 的 Rails 服务器应用程序。当我尝试在 CentOS 6.6 上运行它时,我得到:

uninitialized constant OpenSSL::PKey::EC

这是完整的堆栈跟踪:

$ rails server
/home/foo/.rvm/gems/ruby-2.1.3/gems/json-jwt-1.5.1/lib/json/jwk/jwkizable.rb:69:in `<top (required)>': uninitialized constant OpenSSL::PKey::EC (NameError)
from /home/foo/.rvm/gems/ruby-2.1.3/gems/json-jwt-1.5.1/lib/json/jwt.rb:102:in `<top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/openid_connect-0.9.2/lib/openid_connect/response_object/id_token.rb:1:in `<top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/openid_connect-0.9.2/lib/openid_connect/response_object.rb:7:in `block in <top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/openid_connect-0.9.2/lib/openid_connect/response_object.rb:6:in `each'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/openid_connect-0.9.2/lib/openid_connect/response_object.rb:6:in `<top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/openid_connect-0.9.2/lib/openid_connect/connect_object.rb:52:in `<top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/openid_connect-0.9.2/lib/openid_connect.rb:85:in `<top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `require'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `each'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `block in require'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `each'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `require'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/bundler-1.10.6/lib/bundler.rb:134:in `require'
from /home/foo/tmp/openid_connect_sample/config/application.rb:7:in `<top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/railties-3.2.22/lib/rails/commands.rb:53:in `require'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/railties-3.2.22/lib/rails/commands.rb:53:in `block in <top (required)>'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/railties-3.2.22/lib/rails/commands.rb:50:in `tap'
from /home/foo/.rvm/gems/ruby-2.1.3/gems/railties-3.2.22/lib/rails/commands.rb:50:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

这是什么意思,我该如何克服它?

最佳答案

此问题源于 Red Hat 拒绝在 CentOS 的默认 OpenSSL 构建中包含某些椭圆曲线 (EC) 算法(出于对专利诉讼的恐惧)。

注:根据@Cal's answer , CentOS 6.7 没有这个问题。

openid_connect gem 依赖于 json-jwt gem,它使用其中一种未包含的算法。

因此,您需要重建包含所需算法的新版本 OpenSSL。

这些是我在我的机器上构建一个新的 OpenSSL 所遵循的步骤(改编自 here):

  1. cd/usr/src
  2. wget https://www.openssl.org/source/openssl-1.0.1l.tar.gz
  3. yum install autoconf automake(您可能已经安装了这些)
  4. tar zxvf openssl-1.0.1l.tar.gz
  5. cd openssl-1.0.1l
  6. export CFLAGS="-fPIC"
  7. ./config --prefix=/opt/openssl shared enable-ec enable-ecdh enable-ecdsa
  8. 全部制作
  9. 安装

现在,您的 Ruby 可能仍然链接到旧的 OpenSSL 库,因此您需要重建它以链接到新的。

您在使用 rvm 吗? 太好了!您安装的任何新 Rubies 都将针对新的 OpenSSL 进行构建。 rvm remove 您的 Ruby 并重新安装它(或者只是安装不同的 ruby​​ 版本)。

不使用 rvm 那么我想您需要以传统方式重建 Ruby。但是您可能已经知道该怎么做,对吗?如果没有,您需要查看其他教程,因为我们无法在此处介绍。

现在重新安装 bunder 并执行 bundle install,您的 rails server 现在应该可以成功运行。

(如果有人需要更正或澄清,请发表评论,我会根据需要进行编辑。)

关于ruby - "uninitialized constant OpenSSL::PKey::EC"来自 CentOS 6.6 上的 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com