当我在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.
我不确定你是否回答了自己的问题,因为这是你推荐的解决方案,或者你在网上搜索时找到的解决方案。无论哪种方式,我都不建议使用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
要检查您现在是否使用非系统版本的Ruby,可以运行以下命令:
which ruby
它应该是/usr/bin/ruby
以外的东西
ruby -v
它应该是2.3.7以外的东西。截至今天,2.6.1是最新的Ruby版本。
一旦安装了这个新版本的Ruby,您现在可以安装bundler:
gem install bundler
sudo gem install -n /usr/local/bin bundler
如前所述,在Mac上,系统ruby由root拥有,使用sudo安装该版本的东西是不安全的。如果你做每个宝石以root身份运行,那就是安全噩梦。不要那样做
我将引导您完成我的步骤,因为之前的答案假设了一些命令行foo,并且添加的细节可能对某人有用。
仔细检查我们正在运行旧系统提供的ruby
which ruby
/usr/bin/ruby
(那是系统路径)
ruby -v
ruby 2.3.7
(旧版)
brew install ruby
最后,安装说:
/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