Доморощенная установка Ruby keg-only не может найти драгоценный камень - PullRequest
0 голосов
/ 28 января 2019

Как мне заставить irb работать после установки Ruby с Homebrew?

Когда я пытаюсь запустить irb, я получаю ошибку:

$ irb
Traceback (most recent call last):
    2: from /usr/local/opt/ruby/bin/irb:23:in `<main>'
    1: from /usr/local/lib/ruby/site_ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
/usr/local/lib/ruby/site_ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': can't find gem irb (>= 0.a) with executable irb (Gem::GemNotFoundException)

Я пытался:

$ brew link ruby
Warning: Refusing to link macOS-provided software: ruby
If you need to have ruby first in your PATH run:
  echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile

For compilers to find ruby you may need to set:
  export LDFLAGS="-L/usr/local/opt/ruby/lib"
  export CPPFLAGS="-I/usr/local/opt/ruby/include"

У меня есть строки в верхней части моего /etc/paths файла:

/usr/local/bin
/usr/local/opt/ruby/bin
/usr/local/lib/ruby/gems/2.6.0/bin

irb не отображается в выводе gem list, но:

$ find /usr/local -name irb
/usr/local/lib/ruby/2.6.0/irb
/usr/local/Cellar/ruby/2.6.0_1/bin/irb
/usr/local/Cellar/ruby/2.6.0_1/lib/ruby/2.6.0/irb
/usr/local/Cellar/ruby/2.6.0_1/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb
/usr/local/Cellar/ruby/2.6.0_1/share/ri/2.6.0/system/lib/irb

У меня также похожая проблема с ri & rdoc.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Пробег: gem install irb и теперь тебе пора.

0 голосов
/ 05 февраля 2019

Предполагается, что вы используете Homebrew Ruby ...

Исполняемый файл irb расположен по адресу:

/usr/local/opt/ruby/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb

Вы можете использовать эту строку напрямую, вставив ее в свой $PATH, alias это или что-то еще.


В качестве альтернативы, вы можете исправить /usr/local/opt/ruby/bin/irb вокруг строки 22.

# patch
class Gem::BasicSpecification
  def self.default_specifications_dir
    File.join(Gem.private_dir, "specifications", "default")
  end
end
# /patch

# Next line looks like this. Don't change this.
# if Gem.respond_to?(:activate_bin_path)

Вы можете сделать то же самое в /usr/local/opt/ruby/bin/ri и/usr/local/opt/ruby/bin/rdoc для исправления этих команд.

Почему?

См. https://github.com/Homebrew/homebrew-core/blob/955497722b9bf65069957b0e7c903b96939cdd99/Formula/ruby.rb#L112

В формуле Homebrew Ruby предполагается, что все гемы будут установлены в "глобальном каталоге гемов"."/usr/local/lib/ruby/gems/2.6.0/.Поэтому, когда вы удаляете и переустанавливаете Homebrew Ruby, гемы остаются на месте - вам также не нужно их переустанавливать (что раздражает, поскольку у меня установлены гемы для версий Ruby, которые я даже не устанавливал, но это другая проблема).

Но драгоценные камни Руби по умолчанию не включены в глобальный каталог драгоценных камней.Они находятся внутри установочной директории Ruby (то, что в формуле Homebrew называется private_dir): /usr/local/opt/ruby/lib/ruby/gems/2.6.0/.

Так что Homebrew Ruby не может их найти.

Homebrew исправляет Rubygems , поэтому этот фрагмент исправляет Rubygems снова, но глубже.Вы также можете сделать патч-патч следующим образом:

module Gem
  def self.default_dir
    private_dir  
  end
end

Но default_dir используется в других местах , и я не хотел ничего ломать.

...