你没有/Library/Ruby/Gems/2.3.0目录的写入权限。(Mac用户)

445

以下是我需要做的事情。

要运行规范测试,您需要安装 RSpec。首先,在项目的根目录中运行 gem install bundler 命令。然后运行 bundle install。要运行单个规范测试文件,请运行如下命令:bundle exec rspec spec/00_hello_spec.rb。要一次性运行所有规范测试,请运行 bundle exec rspec 命令。

所以,我在终端中输入了 gem install bundler 命令,但出现了以下错误:

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

这是在 Atom 项目文件中看到的错误信息。

source "https://rubygems.org"
gem "rspec", "~> 3.2.0"
我的问题是: 似乎终端之所以给出响应是因为我不应该更改任何东西在 ruby 上,而我需要在 atom 中bundle install?有人能告诉我如何使用 atom 或在 atom 中运行任何东西吗?

35
只需使用以下命令 sudo chown -R $USER /Library/Ruby/Gems/ - Faiz Fareed
设置全局 Ruby 版本就像这样 rbenv global 3.1.2,然后它就能工作了。 - Sangam
38个回答

574

你说得对,macOS不允许你更改与Mac预装的Ruby版本有关的任何内容。但是,可以使用不干扰Apple提供的版本的单独Ruby版本来安装像bundler这样的gem。

强烈不建议使用sudo安装gems或更改系统文件和目录的权限,即使你知道自己在做什么。我们能否停止提供这种错误的建议?

解决方案包括两个主要步骤:

  1. 安装一个不会干扰Mac预装版本的单独Ruby版本。
  2. 更新你的PATH,使新的Ruby版本的位置在PATH中首先出现。一些工具会自动为你完成此操作。如果你不熟悉PATH及其工作原理,那么这是你应该学习的基础之一,你将了解为什么有时会出现“命令未找到”错误以及如何修复它们。

首先,你需要安装Homebrew,它会安装必备的命令行工具,并使安装其他必要工具变得容易。

那么,安装单独版本的Ruby的两种最简单的方法是:

如果您想要轻松切换多个Ruby版本 [推荐使用]

选择以下四个选项之一:

brew install chruby ruby-install

如果您选择了chrubyruby-install,则可以按照以下方式安装最新的Ruby:

ruby-install ruby

一旦您安装了所有内容并根据上述工具的说明配置了您的.zshrc.bash_profile,请退出并重新启动终端,然后切换到您想要的Ruby版本。对于chruby,操作如下:

chruby 3.1.3

无论您需要配置 .zshrc 还是 .bash_profile 取决于您使用哪个 shell。

如果您确定不需要同时使用多个 Ruby 版本(除了 macOS 自带的版本)[不建议]

即使您现在认为您不需要另一个版本,但最终您将需要,并且您将无法轻松切换。这会导致混乱和头痛,这就是为什么我不建议使用 Homebrew 安装和管理 Ruby。

如果您选择忽略我的警告使用 Homebrew 安装 Ruby,则遇到任何问题将自行解决。

  • 使用 Homebrew 安装 Ruby:
brew install ruby

然后通过运行以下命令更新您的PATH

echo 'export PATH="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/3.1.0/bin:$PATH"' >> ~/.zshrc

上述命令中的3.1.0假定Homebrew安装了以3.1开头的Ruby版本。如果安装了不同的版本,请用您的Ruby版本的前两位数字替换3.1

如果您使用的是M1/M2 Mac,请将/usr/local替换为/opt/homebrew

然后“刷新”您的shell以使这些更改生效:

source ~/.zshrc

或者您可以打开一个新的终端选项卡,或退出并重新启动终端。

如果您使用的是Bash,请将.zshrc替换为.bash_profile。如果您不确定,请阅读我的指南以找出您正在使用哪个shell。

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

which ruby

它不应该是/usr/bin/ruby

ruby -v

应该是3.1.3或更高版本。
安装了这个新版本的Ruby之后,你现在可以安装bundler(或任何其他gem)了。
gem install bundler

14
如果你和我一样使用zsh(或者除了bash之外的其他shell),那么还需要额外的一步!在安装完rbenv后,你需要执行echo 'eval "$(rbenv init -)"' >> ~/.bash_profile来源 - Marlo
3
如果你在/usr/local目录上遇到权限错误,请运行sudo chown -R $(whoami) $(brew --prefix)/*。请参考此帖子了解更多信息。 - Anas Tiour
9
由于MacOS鼓励人们转向zsh,因此您也应将更改应用于/.bash_profile到/.zshrc。 - Adam_G
7
链接被阻止,您需要订阅新闻通讯才能访问(哇)。 - Fluous
8
截至今天,“在macOS上安装Ruby”的代码库为空,并且该脚本被设置了付费墙。很糟糕。 - TJ Murphy
显示剩余13条评论

290

对我来说,使用参数--user-install运行以下命令有效:

gem install name_of_gem --user-install

安装在用户的主目录中,而不是 GEM_HOME

https://guides.rubygems.org/command-reference/#gem-install

RubyGems的默认本地存储库可以通过GEM_PATH和GEM_HOME环境变量进行覆盖。 GEM_HOME将默认存储库设置为安装位置。 GEM_PATH允许搜索多个本地存储库以查找gem。
编辑
还有一个gem我仍然无法安装(它需要Ruby开发工具包的Ruby.h头文件或类似的东西),然后我尝试了不同的版本管理器,但是在文档中说明如何只安装和切换时,某种方式仍然没有真正起作用(它没有切换版本)。 然后我删除了所有已安装的版本管理器,并使用brew install ruby安装了最新版本,并设置了PATH变量(在从brew安装ruby之后将提到),这很有效。

1
这对我很有效; 我只需要将bin路径 (~/.gem/ruby/2.6.0/bin 在我的情况下) 添加到我的 $PATH 中即可。 不需要安装额外的Ruby或支付当前最高答案的安装脚本。 - Cykelero

165
如果你不想使用sudo运行,则可以使用homebrew安装Ruby。
brew install ruby
export GEM_HOME="$HOME/.gem"
gem install rails

如果你正在使用zsh,你可能希望将export GEM_HOME="$HOME/.gem"添加到你的~/.bash_profile.zshrc中。

注意: RubyGems 保留旧版本的 gem 包,所以在更新后可以进行一些清理。

gem cleanup

7
无法在Catalina操作系统上提供帮助。 - Efrat Levitan
`Rails is not currently installed on this system. To get the latest version, simply type:$ sudo gem install railsYou can then rerun your "rails" command` - Efrat Levitan
听起来你正在尝试运行一个 rails 命令。我最后两个命令并没有运行 rails 命令。尝试在项目之外打开一个新的终端,然后逐行复制我的答案的最后两行。 - STIKO
1
在我的Catalina 10.15.4上工作正常,我删除了rvm rbenv,然后安装了rbenv。然后更新了我的.zshrc文件,执行了source ~/.zshrc命令,然后Rails安装无误。感谢您提供的PATH更正。 - Curtis M
这对我有用 - 我也使用Catalina。我不想使用sudo,所以谢谢! - egremont of yorke
显示剩余3条评论

121

只需导出GEM_HOME:

export GEM_HOME="$HOME/.gem"

然后尝试:

gem install cocoapods

4
错误:执行gem时出错...(Errno :: EACCES) 目录_s_mkdir - /Users/kanchan/.local/share/gem/specs 被拒绝权限。 - WannaBeGeek
1
sudo chown -R /Users/kanchan/.local/share/gem/* - Muhammad Naeem Paracha
1
@MuhammadNaeemParacha 不起作用。这是我的代码: sudo chown -R /Users/myName/.local/share/gem/* 密码: 用法:chown [-fhnvx] [-R [-H | -L | -P]] owner[:group] file ... chown [-fhnvx] [-R [-H | -L | -P]] :group file ... 请帮忙。 - Omkar Bojjawar
2
你真是个救命恩人。比其他发布的解决方案容易多了。 - TheAndersMan
请纠正您的答案,并描述在进行此代码后会发生什么。 - Nike Kov
显示剩余7条评论

88

如@idleberg所述,在Mac OS上,最好安装rbenv,以避免在使用手动安装的Ruby时出现权限错误。

安装

$ brew update
$ brew install rbenv

.bashrc文件中添加以下内容:

eval "$(rbenv init -)"

现在,我们可以查看可安装的 Ruby 版本列表

$ rbenv install -l

举例安装版本2.3.8。

$ rbenv install 2.3.8
现在我们可以全局使用这个 Ruby 版本。
$ rbenv global 2.3.8

最后运行

$ rbenv rehash
$ which ruby
/Users/myuser/.rbenv/shims/ruby
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-darwin17]

加油

现在安装bundler

$ gem install bundler

全部完成!


13
这应该被接受作为答案。 - Mark
谢谢,只有这个答案对我有用! - priteshbaviskar
历史最佳答案。 - mgyky
我同意你的观点 - kadir yapar

21

试一试:

sudo gem install cocoapods --user-install

适合我


1
这是我唯一有效的方法。尝试安装rbenv并使用多个Ruby版本,但没有任何进展。 - Hung Vu
警告:这可能会在未来引起问题。 - mgyky
亲爱的,对我来说没问题。 - Sajib saha
1
完美!我的已经可以用了。 - undefined

15

通常建议使用版本管理器,例如rbenvrvm。否则,安装的Gems将作为root对其他用户可用。

如果您知道自己在做什么,可以使用sudo gem install


13

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

在我的情况下,问题与Ruby有关,一些Ruby路径在我的系统中出现了问题。

以下步骤帮助我解决了问题

  1. 打开终端

  2. 使用homebrew安装ruby

[用于全新安装] brew install ruby

[用于重新安装] brew reinstall ruby

  1. 使用以下命令检查ruby的路径

    which ruby

  2. 它应该安装在以下路径

    /usr/bin/ruby

  3. 更改ruby路径到用户路径

检查系统使用的shell

echo $0

-zsh

对于zshrc文件

echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >>~/.zshrc

对于bash文件

echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >>~/~/.bashrc

  1. 退出并重新启动终端

  2. 更改路径后执行此步骤5

  3. 再次检查Ruby的路径(执行步骤3 - 请确保路径显示如下所示)

/usr/local/opt/ruby/bin/ruby

[如果您没有退出并重新启动终端,则会显示步骤4的路径]

  1. 此步骤可能不适用于所有人,如果已安装正确的Cocoapods版本,则可以跳过步骤10和11

检查已安装的pod版本

pod --version

  1. 卸载特定版本的Cocoapods,使用以下命令

如果安装的版本为1.11.0

gem uninstall cocoapods -v 1.11.0

  1. 安装特定版本的Cocoapods

    gem install cocoapods -v 1.11.0

  2. 将路径更改为项目目录 cd {项目目录的路径}

  3. 在项目目录中安装bundler

bundle install

  1. 执行pod install

pod install


在 M1 芯片中 - 我遇到了问题。在第5步之后,路径没有改变,而且它总是显示第4步。我该怎么办?我已经退出后重新打开了终端。但是没有用。是否有特定的命令可以用来更改路径。 - Naresh
我的 Ruby 安装版本是 ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21] - Naresh
你是英雄! - Rizvan Rzayev

10

运行此代码

$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init -)"

按照说明进行操作(在我的情况下添加到~/.zshrc文件中);)


还有一点很重要:只有在重新启动控制台后更改才会生效。两种选项:

  • 输入source <修改后的文件>
  • 关闭并重新打开

我升级到Catalina(从bash切换到zsh),但我忘记将.bash_profile中的所有内容复制到.zshrc中。 - wetjosh
这个可行!不要使用 sudo!如果您不使用 ZSH,可以将此添加到您的 .profile.bash_profile 中。检查此方法是否有效的好方法是使用 which ruby,它应该指向具有 rbenv 路径而不是 /usr/local/ruby - Swaathi Kakarla

8

请谨慎使用sudo!!!仅在您知道自己在做什么的情况下使用!!!!

在安装macOS Catalina后,我遇到了相同的问题。 我尝试了以下命令,它有效。

sudo gem update

迄今为止,对于不想进行完整的Ruby安装+包管理器等等的任何人来说,最简单的解决方案。 - dss
4
你绝不能使用 sudo 命令安装你无法控制的任何开发依赖。 - Andre Ravazzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接