ruby-on-rails - gem 更新导致错误:未定义的方法 ssl_version
问题描述
我尝试gem
在我的 macOS 中更新,但出现以下错误:
$ RUBYOPT= gem update --system
ERROR: While executing gem ... (NoMethodError)
undefined method `ssl_version=' for #<OpenSSL::SSL::SSLContext:0x007f8561047638>
Did you mean? ssl_timeout=
gem update
和的输出gem install {package_name}
是一样的。
gem env version
or的输出gem --version
是:
3.0.3
的输出openssl version
是:
自由SSL 2.6.5
我该如何解决这个问题?
macOS 版本:10.14.4
输出gem env
:
RubyGems Environment:
- RUBYGEMS VERSION: 3.0.3
- RUBY VERSION: 2.4.0 (2016-12-24 patchlevel 0) [x86_64-darwin16]
- INSTALLATION DIRECTORY: /Users/adv/.rvm/gems/ruby-2.4.0
- USER INSTALLATION DIRECTORY: /Users/adv/.gem/ruby/2.4.0
- RUBY EXECUTABLE: /Users/adv/.rvm/rubies/ruby-2.4.0/bin/ruby
- GIT EXECUTABLE: /usr/local/bin/git
- EXECUTABLE DIRECTORY: /Users/adv/.rvm/gems/ruby-2.4.0/bin
- SPEC CACHE DIRECTORY: /Users/adv/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /Users/adv/.rvm/rubies/ruby-2.4.0/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-16
- GEM PATHS:
- /Users/adv/.rvm/gems/ruby-2.4.0
- /Users/adv/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Users/adv/.rvm/gems/ruby-2.4.0/bin
- /Users/adv/.rvm/gems/ruby-2.4.0@global/bin
- /Users/adv/.rvm/rubies/ruby-2.4.0/bin
- /Users/adv/.fastlane/bin
- /Library/Frameworks/Python.framework/Versions/3.7/bin
- /usr/local/sbin
- /Users/adv/.rbenv/shims
- /Users/adv/.rvm/bin
- /Users/adv/.fastlane/bin
- /Library/Frameworks/Python.framework/Versions/3.7/bin
- /usr/local/sbin
- /Users/adv/.rbenv/shims
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /usr/local/share/dotnet
- /Library/Frameworks/Mono.framework/Versions/Current/Commands
- /Users/adv/android-sdks/platform-tools
- /Users/adv/android-sdks/tools
- /opt/metasploit-framework/bin
- /opt/metasploit-framework/bin
- /Users/adv/android-sdks/platform-tools/
- /Users/adv/android-sdks/tools/
- /opt/metasploit-framework/bin
- /opt/metasploit-framework/bin
输出which gem
:
/Users/adv/.rvm/rubies/ruby-2.4.0/bin/gem
输出rbenv versions
:
system
* 2.4.1 (set by /Users/adv/.rbenv/version)
输出ruby -ropenssl -e "puts OpenSSL::OPENSSL_LIBRARY_VERSION"
:
OpenSSL 1.1.1b 26 Feb 2019
输出rvm list
:
=* ruby-2.4.0 [ x86_64 ]
# => - current
# =* - current && default
# * - default
更新:在我完全删除(rvm
并rbenv
重新启动终端会话)后,我尝试gem update
再次执行,结果如下:
$ gem update
Updating installed gems
Updating CFPropertyList
Fetching: CFPropertyList-3.0.0.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
我认为它现在再次使用 macOS 的系统 ruby。
以下是一些输出:
输出gem -v
:
2.5.2.3
输出ruby -v
:
ruby 2.3.7p456(2018-03-28 修订版 63024)[universal.x86_64-darwin18]
输出which gem
:
/usr/bin/gem
输出which ruby
:
/usr/bin/红宝石
我的目标是使用gem
没有问题(安装和更新等)。接下来我该怎么办?
解决方案
OpenSSL::SSL::SSLContext#ssl_version=
出现在 ruby 1.8.7 中,mac os 内置了 2.3.7
刚刚检查了 10.14.2 -
require 'openssl'; OpenSSL::SSL::SSLContext.new.ssl_version="TLSv1"
即使在系统 ruby 上也可以正常工作,OpenSSL 版本与您的相同。
唯一需要怀疑的是 rbenv 与 rvm 冲突,因为你都安装了,它可能会弄乱加载的库和 ruby 编译。我建议完全删除其中一个(也不要忘记在此之后启动新的 shell 会话)并重新安装损坏的 ruby。
推荐阅读
- sql-server-data-tools - 使用 DacServices.Deploy 发布 DACPAC (SSDT) 期间的执行超时错误
- php - PHPUnit 未定义的方法调用
- python - python中的文件路径错误
- java - 在数据框 spark 1.6 java 中将字符串转换为日期或整数
- python - 如何对 csv.writer 返回的对象进行类型注释?
- javascript - 单击子菜单页面时如何发出ajax请求?
- sql - regexp_replace 和 regexp_substr 变量的比较
- raspberry-pi3 - 在 RPi B+ 上构建 Yocto 镜像
- json - 杰克逊反序列化包含对象数组的对象
- cordova - 无法在 ionic 中获取 Ram 和存储信息