安装 Ruby gems 不适用于 Homebrew

问题描述 投票:0回答:7

我通过

sudo gem install ...
安装的gems无法执行(我得到了
command not found
)。

它们似乎安装到

/usr/local/Cellar/
中,这是 Brew 的安装目录(此外,
/Library/Ruby/
中的 gem 也不起作用)。我还需要做些什么才能使 gems 可执行吗?我在 Mac OS X 10.6 上使用 Zsh,在 Brew 中使用 Ruby v1.8。

编辑:它现在似乎正在工作。我刚出去几个小时,回来再试一次。

ruby macos bash rubygems homebrew
7个回答
170
投票

自制很好。然而,与

brew
npm
不同,
gem
不会自动在
/usr/local/bin
中创建别名。

解决方案

我采用了一种非常简单的方法(截至 2020 年 3 月):

# Based on "`brew --prefix ruby`/bin"
export PATH=/usr/local/opt/ruby/bin:$PATH
# Based on "`gem environment gemdir`/bin"
export PATH=/usr/local/lib/ruby/gems/3.0.0/bin:$PATH

将此添加到您的

.bashrc
(或
.bash_profile
.zshrc
等)。

就是这样!现在,所有 Ruby bin 和已安装的 gem 都可以从您的 shell 中获取!

在旧版本的 Homebrew(2017 年之前)中,有一个单独的 Ruby 2 软件包,名为

ruby20
,您可以使用以下代码片段:

export PATH=/usr/local/opt/ruby20/bin:$PATH

这条线是当时唯一需要的线。但是,在 Ruby 2.1 中,gems 被移动到一个单独的目录中。不再位于

/usr/local/opt/ruby/bin
下,而是位于
/usr/local/lib/ruby/gems/2.0.0/bin
下(其中“2.0.0”是用于 Gem 目的的最后一个主要 Ruby 版本)。

如何运作

Homebrew 会跟踪安装包的位置,并为您维护一个指向那里的符号链接。

$ brew --prefix ruby
/usr/local/opt/ruby

$ l /usr/local/opt/ruby
/usr/local/opt/ruby@ -> ../Cellar/ruby/2.5.3_1

实际上,将

/usr/local/opt/ruby
添加到
PATH
与以下内容相同:

export PATH=/usr/local/Cellar/ruby/2.5.3_1/bin:$PATH

不同的是,这个长版本硬编码了当前安装的 Ruby 版本,并且在您下次升级 Ruby 时将停止工作。

对于 Gem,以下命令将告诉您 Gem 添加新包的确切目录:

$ gem environment gemdir
/usr/local/lib/ruby/gems/2.7.0

工具

这些工具旨在自动在 Homebrew 和 Gem 之间建立桥梁:

我没有用过这些,但它们可能对你有用。


24
投票

brew unlink ruby; brew link ruby
可能会添加符号链接到
/usr/local/bin/
:

$ which sass
$ brew unlink ruby; brew link ruby
Unlinking /usr/local/Cellar/ruby/2.0.0-p0... 20 links removed
Linking /usr/local/Cellar/ruby/2.0.0-p0... 31 symlinks created
$ which sass
/usr/local/bin/sass

brew --prefix ruby
仍然很慢,但您也可以将
/usr/local/opt/ruby/bin
添加到路径中。

$ time brew --prefix ruby
/usr/local/opt/ruby
0.216
$ time brew --prefix ruby
/usr/local/opt/ruby
0.076
$ stat -f%Y /usr/local/opt/ruby
../Cellar/ruby/2.0.0-p0

11
投票

我喜欢自制啤酒。可能有更好的方法来做到这一点,但如果你运行:

gem environment

这将打印出所有相关路径的漂亮列表。寻找标有

EXECUTABLE DIRECTORY
的标签。这就是您要添加到路径中的路径。就我而言,这是
/usr/local/Cellar/ruby/1.9.3-p362/bin/ruby
,但我想它会随着 Ruby 的新版本而改变。

我使用

/bin/bash
作为我的 shell,但将其添加到路径的过程应该与名称差不多。

我使用 TextWrangler(通过命令行工具)来编辑我的

.profile
文件。要做到这一点,只需:

edit ~/.profile

完成后,关闭终端并打开一个新终端,或者运行:

source ~/.profile

10
投票

使用蒂莫的答案中的信息,我得到了这个:

PATH=/usr/local/opt/ruby/bin:$PATH
GEMSDIR=$(gem environment gemdir)/bin
PATH=$GEMSDIR:$PATH
export PATH

适用于 Homebrew,适用于单独的 gems 目录,并且不硬编码 Ruby 版本。


6
投票

你也可以使用自制程序安装的 ruby 。你只是缺少自制程序的自定义宝石集的功能。

首先要做:

sudo nano /etc/paths

这将打开 Nano 编辑器,

然后将以下内容添加到路径中:

/usr/local/Cellar/ruby/1.9.3-p194/bin

您的 ruby 版本可能会有所不同。

就是这样。它现在应该检测到您的宝石。

哦,顺便说一句,您需要 Ctrl+X > y > ENTER 才能将文件保存在 nano 中。


4
投票

而不是使用 =>

$(cd $(which gem)/..; pwd)

你可以用这个代替=>

$(brew --prefix ruby)/bin


3
投票

我认为这有点演变。

只需添加

export PATH=/usr/local/opt/ruby/bin:$PATH

到您的 .bashrc (或 .bash_profile、.zshrc/.bashrc、.. – 无论您使用什么)。

如果您对 ruby 本身有问题

brew unlink ruby
brew link ruby
© www.soinside.com 2019 - 2024. All rights reserved.