在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.
答案 0 :(得分:6)
如前所述,在Mac上,系统ruby由root拥有,因此使用sudo在该版本上安装东西并不安全。如果您这样做,那么每个宝石都将以root身份运行,这就是安全噩梦。 不要这样做
由于先前的回答假定了一些命令行foo,因此我将逐步进行操作,并且所添加的详细信息可能对某人有用。
再次检查我们是否正在运行由系统提供的旧红宝石
which ruby
/usr/bin/ruby
(这是系统路径)
ruby -v
ruby 2.3.7
(旧版本)
brew install ruby
最后,安装提示:
/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种最流行的方法是:
brew install ruby
安装ruby,然后通过运行PATH
,然后是echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
chruby和ruby-install-我的个人建议以及上述脚本自动安装的建议。这些可以与Homebrew一起安装。
rbenv-可以与Homebrew一起安装
要检查您是否正在使用非系统版本的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 中安装最新的 ruby
后 brew install ruby
为我工作