ma1*_*w28 4 ruby homebrew rubygems
irb使用Homebrew安装Ruby后如何工作?
当我尝试运行时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)
Run Code Online (Sandbox Code Playgroud)
我试过了:
$ 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"
Run Code Online (Sandbox Code Playgroud)
我的/etc/paths文件顶部下面有几行:
/usr/local/bin
/usr/local/opt/ruby/bin
/usr/local/lib/ruby/gems/2.6.0/bin
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我也有ri&的类似问题rdoc。
假设您正在使用 Homebrew Ruby...
可执行文件irb位于:
/usr/local/opt/ruby/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb
Run Code Online (Sandbox Code Playgroud)
您可以直接使用该行,将其符号链接到您的$PATH、aliasit 或其他内容中。
或者,您可以/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)
Run Code Online (Sandbox Code Playgroud)
您也可以在/usr/local/opt/ruby/bin/ri和中执行相同的操作来修补这些命令。/usr/local/opt/ruby/bin/rdoc
为什么?
Homebrew Ruby 公式假设所有 gem 都将安装在“全局 gem 目录”中/usr/local/lib/ruby/gems/2.6.0/。因此,当您卸载并重新安装 Homebrew Ruby 时,gems 会保留下来 - 您也不必重新安装它们(有点烦人,因为我已经为 Ruby 版本安装了 gem,我什至不再安装了,但这是另一个问题)。
但 Ruby 的默认 gem 并不位于全局 gem 目录中。它们位于 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
Run Code Online (Sandbox Code Playgroud)
但default_dir 在其他地方使用,我不想破坏任何东西。
| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |