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

Cha*_*avy 11 macos bundle rubygems

当我gem install bundler在MacOS 10.13.x中使用命令时,错误是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.
Run Code Online (Sandbox Code Playgroud)

mon*_*esh 19

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

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

好消息是,您可以安装单独的Ruby版本,而不会干扰Mac随附的版本。完成后,您PATH将需要更新,以使新Ruby版本的位置在中PATH。该PATH指目录列表,并在其中的计算机看起来起来找到可执行程序的顺序。如果键入echo $PATHTerminal,您将看到目录列表,以冒号分隔。它可能看起来像这样:

/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)

这意味着,当你键入gem install bundler,您的计算机会查找程序中调用gem/usr/bin第一个,因为这也正是苹果提供的红宝石生活的版本,它为您提供了权限错误。

安装新版本的Ruby后,如果进行更新PATH以使新Ruby的位置在列表中的第一位,则您的计算机将在运行时首先显示在该列表中gem install bundler,并且它将运行。

有几种方法可以在Mac上安装Ruby。我推荐并希望在各种安装说明中更加流行的最佳方法是使用自动脚本,该脚本将为您设置合适的Ruby环境,包括更新PATH。这将大大减少由于指令不足而导致出错的可能性,这些指令会使用户手动执行大量操作,然后由用户自己决定所有必要步骤。

您可以采取的另一种方法是花费额外的时间手动执行所有操作,并希望做到最好。首先,您将需要安装Homebrew,这使得安装其他工具和macOS应用程序变得容易。

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

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

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

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

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

  • rbenv-可以与Homebrew一起安装

  • RVM

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

which ruby
Run Code Online (Sandbox Code Playgroud)

应该不是 /usr/bin/ruby

ruby -v
Run Code Online (Sandbox Code Playgroud)

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

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

gem install bundler
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的详细回答。对于我来说,使用 zsh,ruby 安装推荐命令 `echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc`。之后,我运行了 `source ~/.zshrc`。 (2认同)

joa*_*oar 6

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

我将逐步指导您完成所有步骤,因为先前的答案都假定了一些命令行foo,并且所添加的详细信息可能对某人有用。

仔细检查我们是否正在运行旧的,系统提供的红宝石

which ruby
/usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)

(这是系统路径)

ruby -v
ruby 2.3.7
Run Code Online (Sandbox Code Playgroud)

(旧版本)

brew install ruby
Run Code Online (Sandbox Code Playgroud)

或先安装Brew

最后,安装说明:

/usr/local/Cellar/ruby/2.6.3
Run Code Online (Sandbox Code Playgroud)

作出这样的表演了路径第一

PATH=/usr/local/Cellar/ruby/2.6.3/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

再确认一次

which ruby
/usr/local/Cellar/ruby/2.6.3/bin/ruby
Run Code Online (Sandbox Code Playgroud)

仔细检查版本

ruby --version
ruby 2.6.3p62
Run Code Online (Sandbox Code Playgroud)

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

echo  PATH=/usr/local/Cellar/ruby/2.6.3/bin:$PATH >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)


Cha*_*avy 5

sudo gem install -n /usr/local/bin bundler
Run Code Online (Sandbox Code Playgroud)