Ошибка обновления драгоценного камня: неопределенный метод ssl_version - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь обновить 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 или gem --version:

3.0.3

Выход openssl version:

LibreSSL 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.

Вот несколько выводов:

Вывод gem -v:

2.5.2.3

Вывод ruby -v:

ruby ​​2.3.7p456 (версия 20130-03-28 63024) [унивersal.x86_64-darwin18]

Выход which gem:

/ usr / bin / gem

Выход which ruby:

/ usr / bin / ruby ​​

Моя цель - использовать gem без проблем (установка, обновление и т. Д.).Что мне делать дальше?

1 Ответ

1 голос
/ 27 апреля 2019

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.Я предлагаю полностью удалить один из них (также не забудьте запустить новый сеанс оболочки после этого) и переустановить поврежденный ruby.

...