您没有对/Library/Ruby/Gems/2.3.0目录的写许可权

时间:2018-08-03 03:00:33

标签: macos rubygems bundle

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

4 个答案:

答案 0 :(得分:6)

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

由于先前的回答假定了一些命令行foo,因此我将逐步进行操作,并且所添加的详细信息可能对某人有用。

再次检查我们是否正在运行由系统提供的旧红宝石

which ruby
/usr/bin/ruby

(这是系统路径)

ruby -v
ruby 2.3.7

(旧版本)

brew install ruby

install brew first

最后,安装提示:

/usr/local/Cellar/ruby/2.6.3

使它们显示在路径中 first

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

答案 1 :(得分:4)

sudo gem install -n /usr/local/bin bundler

答案 2 :(得分:4)

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

之所以会出现该权限错误,是因为macOS不允许您修改Mac随附的Ruby版本。 Mac上预装的开源工具的特定版本仅应由Apple管理。权限错误是有原因的。您不想使用sudo覆盖它。

好消息是,您可以安装单独的Ruby版本,而不会干扰Mac随附的版本。完成后,您的PATH将需要更新 这样新的Ruby版本的位置就位于PATH中。 PATH引用目录列表,以及计算机查找目录以查找可执行程序的顺序。如果在终端中键入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种最流行的方法是:

如果您同时不需要多个版本的Ruby(macOS随附的版本除外)

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

如果您想轻松地在许多Ruby版本之间切换的灵活性

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

  • rbenv-可以与Homebrew一起安装

  • RVM

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

which ruby

应该不是/usr/bin/ruby

ruby -v

应该不是2.3.7。到目前为止,2.6.1是最新的Ruby版本。

一旦您安装了这个新版本的Ruby,现在就可以安装捆绑程序:

gem install bundler

答案 3 :(得分:0)

最好不要一直sudo

正确的方法是在您通过 source ~/.zshrc 在 Mac 中安装最新的 rubybrew install ruby 为我工作