你没有/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个回答

7
为解决此问题,我运行了以下命令:
brew reinstall ruby

显示了这条消息

==> Caveats
==> ruby
By default, binaries installed by gem will be placed into:
  /opt/homebrew/lib/ruby/gems/3.1.0/bin

You may want to add this to your PATH.

ruby is keg-only, which means it was not symlinked into /opt/homebrew,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ruby first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.profile

因此,我在我的~/.bashrc文件中添加了这两行代码。

export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
export PATH="/opt/homebrew/lib/ruby/gems/3.1.0/bin:$PATH"

接着,我打开了一个新的 Terminal.app 窗口,并再次运行了我的gem install命令,这次成功了。


6

2
export GEM_HOME="$HOME/.gem" 对我有用。 - Nicholas Porter
哇哦... 这个方法对我有效:export GEM_HOME="$HOME/.gem" - Monika Patel

6

在假设已经安装Homebrew的M1 MacBook Air上测试

按照最佳答案所述,我们可以运行以下命令:

brew install chruby ruby-install

安装最新稳定版本的 Ruby:

ruby-install ruby

然后运行以下命令获取版本号:

chruby

在您的 ~/.zshrc 文件中:

export PATH=/opt/homebrew/bin:$PATH
source /opt/homebrew/opt/chruby/share/chruby/chruby.sh
source /opt/homebrew/opt/chruby/share/chruby/auto.sh
chruby 3.1.2

当运行chruby时,"3.1.2"是我得到的输出结果。请确保在末尾添加这一行。

记得每次安装新的gem后都要重新启动终端。


5
如果您单独安装了Ruby并使用rbenv/rvm进行安装,那么您的bundler可能会指向不同版本。
尝试运行:
gem env home

并且

ruby -v

两者应该指向同一个版本。请确认你是通过rbenv/rvm安装了ruby,如果是,请删除单独安装的ruby版本。

为了让gem工作,你必须调用rbenv。

rbenv shell <ruby version> 

并且
rbenv global <ruby version>

我不确定RVM是如何工作的。 如果这个方法行得通,请告诉我。


缺少设置 shell 和 global。为什么 rbenv 的说明中没有这个呢? - feitla
不确定为什么会被忽略,但在尝试后我找到了答案。 - Bharathan Kumaran

4
安装完 rbenv 后,我也遇到了这个问题,在我的 .bashrc 文件中添加下面这行代码即可解决: eval "$(rbenv init -)"

4

我使用以下命令删除了这些目录

sudo rm -rf \
  /Library/Ruby/Gems/2.6.0/{build_info,cache,doc,extensions,gems} \
  /Library/Ruby/Gems/2.6.0/specifications/*.gemspec \
  /Library/Ruby/Site

然后使用 sudo gem install cocoapods 安装 CocoaPods,这对我有用。谢谢。


这解决了我在安装Gollum和CocoaPods时遇到的问题。 - Liang Zeng

3

针对最新的操作系统版本

  1. 首先运行 sudo xcode-select --switch /
  2. sudo gem install cocoapods --user-install

这对我来说解决了问题。


谢谢,你的解决方案对我有用,我一直在寻找这个答案来修复我的Mac上的CocoaPods! - Basel

3

适用于 Mac OS 12 及以上版本,也适用于 13 版本。 Xcode 版本需为 14 或以上。

首先,您需要执行以下命令:

export GEM_HOME="$HOME/.gem" 之后 gem install cocoapods

这将有助于您完成操作 ☺️


救命稻草...快速而有效。 - Dharmendra

3
我也遇到了这个Ruby问题,最终在搭载M1芯片的Mac上找到了一个简单且有效的解决方案。
为了安装Ruby,我使用了一个简单的Ruby管理器,叫做chruby(https://github.com/postmodern/chruby#readme)。
步骤如下:
1. 安装Homebrew(视频教程在这里:https://youtu.be/IWJKRmFLn-g) 2. 使用以下命令安装chruby:
brew install chruby ruby-install 

安装最新的Ruby版本,使用以下命令:
ruby-install ruby

4. 编辑.zshrc文件。你可以使用nano或任何其他文本编辑器。 .zshrc文件位于根目录中,是一个隐藏文件。 这个文件负责终端命令。
nano ~/.zshrc

将这两行代码添加到.zshrc文件中并保存。在第3步中,将3.2.2替换为您安装的Ruby版本。这将使终端使用所选的Ruby版本。
source /opt/homebrew/opt/chruby/share/chruby/chruby.sh
chruby 3.2.2

6. 关闭并重新打开终端。 7. 使用以下命令检查当前正在使用的 Ruby 版本:
ruby -v

2

TL;DR

有时候,在尝试失败的命令之前,关闭终端会话并打开一个新的会话可以解决这种类型的错误。

详细说明

在某些操作系统(例如 MacOS)中,已经预装了全局版本的 Ruby。如果您正在使用版本管理器,例如 rbenvasdf,它们通过与当前会话的环境交互来工作,以便相关的命令指向版本管理器安装的二进制文件。

当安装新二进制文件时,版本管理器将其安装在特殊位置,通常位于用户的主目录下的某个地方。然后,它会配置您的 PATH 中的所有内容,以便在发出命令时获得新安装的二进制文件,而不是系统随附的二进制文件。但是,如果您不重启会话(还有其他更新环境的方法,但那是最简单的方法),则无法获取新配置,您将使用原始安装。


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