您没有/Library/Ruby/Gems/2.3.0目录的写权限

问题描述 投票:3回答:2

当我在MacOS 10.13.x中使用命令gem install bundler时,错误是You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

$ gem install bundler
Fetching: bundler-1.16.2.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
macos rubygems bundle
2个回答
10
投票

我不确定你是否回答了自己的问题,因为这是你推荐的解决方案,或者你在网上搜索时找到的解决方案。无论哪种方式,我都不建议使用sudo来安装gem,因为它可能导致您可能无法撤消的问题。

您获得该权限错误的原因是因为macOS不允许您修改随Mac安装的Ruby版本。预装在Mac上的特定版本的开源工具仅由Apple管理。权限错误是有原因的。你不想用sudo覆盖它。

好消息是,您可以安装单独版本的Ruby,它不会干扰Mac附带的版本。一旦完成,你的PATH将需要更新,以便新的Ruby版本的位置首先在PATHPATH指的是目录列表,以及计算机查找它们以查找可执行程序的顺序。如果在终端中键入echo $PATH,您将看到以冒号分隔的目录列表。它可能看起来像这样:

/usr/bin:/bin:/usr/sbin:/sbin

这意味着当你输入gem install bundler时,你的计算机会首先在gem中查找名为/usr/bin的程序,而且由于这是Apple提供的Ruby版本所在,它会给你许可错误。

一旦你安装了新版本的Ruby,如果你更新你的PATH,以便新Ruby的位置在列表中的第一位,那么当你运行gem install bundler时,你的计算机将会首先查看它,它会起作用。

有几种方法可以在Mac上安装Ruby。我推荐的最佳方式,以及我希望在各种安装说明中更为普遍的方法是使用automated script为您设置适当的Ruby环境,包括更新PATH。这大大降低了由于不充分的指令而导致错误的可能性,这些指令使得用户手动执行大量操作并将其留给他们以找出所有必要的步骤。

您可以采取的另一条路线是花费额外的时间手动完成所有工作并希望获得最佳效果。首先,您需要安装Homebrew,这样可以轻松安装其他工具和macOS应用程序。

然后,安装单独版本的Ruby的4种最流行的方法是:

If you don't need more than one version of Ruby at the same time (besides the one that came with macOS)

  • 自制软件 - 安装完成后,用brew install ruby安装ruby,然后运行PATH更新你的echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile,然后运行source ~/.bash_profile

If you would like the flexibility of easily switching between many Ruby versions

  • chrubyruby-install - 我的个人建议以及上述脚本自动安装的建议。这些可以与Homebrew一起安装。
  • rbenv - 可以与Homebrew一起安装
  • RVM

要检查您现在是否使用非系统版本的Ruby,可以运行以下命令:

which ruby

它应该是/usr/bin/ruby以外的东西

ruby -v

它应该是2.3.7以外的东西。截至今天,2.6.1是最新的Ruby版本。

一旦安装了这个新版本的Ruby,您现在可以安装bundler:

gem install bundler

4
投票
sudo gem install -n /usr/local/bin bundler

2
投票

如前所述,在Mac上,系统ruby由root拥有,使用sudo安装该版本的东西是不安全的。如果你做每个宝石以root身份运行,那就是安全噩梦。不要那样做

我将引导您完成我的步骤,因为之前的答案假设了一些命令行foo,并且添加的细节可能对某人有用。

仔细检查我们正在运行旧系统提供的ruby

which ruby
/usr/bin/ruby

(那是系统路径)

ruby -v
ruby 2.3.7

(旧版)

brew install ruby

或者install brew first

最后,安装说:

/usr/local/Cellar/ruby/2.6.3

首先在路径中显示

PATH=/usr/local/Cellar/ruby/2.6.3/bin:$PATH

再检查一遍

which ruby
/usr/local/Cellar/ruby/2.6.3/bin/ruby

仔细检查版本

ruby --version
ruby 2.6.3p62

使路径更新永久(否则每次要使用ruby时都必须更新路径)

echo  PATH=/usr/local/Cellar/ruby/2.6.3/bin:$PATH >> ~/.
bash_profile
© www.soinside.com 2019 - 2024. All rights reserved.