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

下面是我需要做的。

要运行规范,需要安装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?谁能告诉我如何使用原子或者在原子中运行任何东西?

417265 次浏览

通常建议使用rbenvrvm这样的版本管理器。否则,安装的Gems将作为root供其他用户使用。

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

如果你不想运行sudo,那么使用自制程序安装ruby

brew install ruby
export GEM_HOME="$HOME/.gem"
gem install rails

如果你正在使用zsh,你可能想要在你的~/.bash_profile.zshrc中添加export GEM_HOME="$HOME/.gem"

注意: RubyGems保留旧版本的宝石,所以在更新后可以自由地做一些清理:

gem cleanup

更新:

macOS不会让你修改Mac自带的Ruby版本,你是对的。但是,你可以使用一个独立的Ruby版本来安装像bundler这样的gems,而不会干扰苹果提供的Ruby版本。

使用sudo来安装gems,或者改变系统文件和目录的权限是强烈不鼓励的,即使你知道你在做什么。我们能不能别再提这些馊主意了?我写了一篇详细的文章来展示为什么你不应该使用sudo来安装宝石

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

  1. 安装一个独立的Ruby版本,它不会影响Mac自带的Ruby版本。
  2. 更新你的PATH,这样新的Ruby版本的位置在PATH的第一个。有些工具会自动为您执行此操作。如果你不熟悉PATH和它是如何工作的,这是你应该学习的基础知识之一,你会明白为什么你有时会得到&;__abc3 &;错误以及如何修复它们。

在Mac上安装Ruby有几种方法。我推荐的最好的方法,也是我希望在各种安装说明中更普遍的方法是使用像Mac版Ruby这样的自动脚本,它会为你设置一个合适的Ruby环境。

主要原因是它为每个人节省了大量的时间。时间是我们最有限也是最宝贵的资源。为什么要让人们手动去做事情,而不是每次都能自动得到完美的结果呢?

另一个原因是,它大大降低了人为错误或由于指令不完整而导致错误的几率。

如果您想手动操作,请继续阅读。首先,你会想要安装家酿,它会安装必要的命令行工具,并使安装其他必要的工具变得容易。

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

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

从以下四个选项中选择一个:

brew install chruby ruby-install

如果你选择了chrubyruby-install,你可以像这样安装最新的Ruby:

ruby-install ruby

一旦你安装了所有东西,并根据上面工具的说明配置了.zshrc.bash_profile,退出并重新启动Terminal,然后切换到你想要的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版本。如果它安装了不同的版本,将3.1替换为Ruby版本的前两位数字。

如果你在M1/M2 Mac上,用/opt/homebrew替换/usr/local

然后“refresh"您的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

请小心使用sudo !!!!!!只有当你知道你在做什么!!!!!!!!!!!!

在安装macOS Catalina后,我也遇到了同样的问题。我尝试下命令和它的工作。

sudo gem update

Mac解决方案

  1. 安装/更新数位视讯的最新ruby版本

    \curl -sSL https://get.rvm.io | bash -s stable < / p >

  2. < p >安装打包机

    gem install bundler < / p >


在这之后,(sudo) gem install ....开始工作

运行这个

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


eval "$(rbenv init -)"

遵循说明,(在我的情况下,添加到~ / . zshrc);)


同样重要的是:更改只有在重新启动控制台时才生效。两个选项

  • 进入source <modified file>
  • 关上再打开

使用参数--user-install运行以下命令为我工作:

gem install name_of_gem --user-install

编辑

有一个gem我仍然无法安装(它需要Ruby开发工具包的Ruby.h头文件或其他东西),然后我尝试了不同的版本管理器,但不知为何,这仍然不能真正工作,因为它在文档中说明了如何安装和切换(它只是没有切换版本)。 然后我删除了所有已安装的版本管理器,然后使用brew install ruby安装最新版本,并设置了PATH变量。(从brew安装ruby后会提到),这是有效的

如果你已经单独安装了ruby,并且使用rbenv/rvm安装了ruby,那么你的指针可能指向不同的版本。

试一试

gem env home

而且

ruby -v

两者应该指向相同的版本。检查您是否使用rbenv/rvm安装了ruby,如果是,请删除您单独安装的ruby版本。

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

rbenv shell <ruby version>

而且

rbenv global <ruby version>
我不知道RVM是如何工作的。 让我知道这是否有效

这在Mac上很管用

sudo chown -R $(whoami) $(brew -prefix)/*

我正在使用Mojave和rbenv,这个解决方案适合我:

$ vi ~/.bash_profile

将这一行添加到文件中:

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
< p >简单地做 sudo gem uninstall cocoapods为我工作

应该使用不同的ruby安装。为此,我使用rbenv

# install your version of ruby
$ rbenv install 2.0.0-p247


# modify .ruby_version on current directory
$ rbenv local 2.0.0-p247


# proceed installing gems
$ gem install bundler

免责声明:我不喜欢红宝石。这对我来说很有效,如果你是一个ruby专家,在这个答案中看到了一些变化,请继续前进或评论!

博士TL;

在一些情况下,我通过关闭终端会话并在重新尝试失败的命令之前打开一个新的会话来解决这类错误。

长解释

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

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

mac解决方案。执行命令

sudo gem update

然后按提示输入你的Mac密码

试试这个:

sudo gem install cocoapods --user-install

为我工作

正如@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]

大胆尝试吧

现在安装捆扎器

$ gem install bundler

全部完成!

尝试1到2个

1 - $ gem install cocoapods
2 - $ sudo gem install cocoapods

如果它不工作,然后导出GEM_HOME:

export GEM_HOME="$HOME/.gem"

再试一次:

gem install cocoapods

记住,官方文档说你可以使用sudo (https://guides.cocoapods.org/using/getting-started.html#getting-started)。

在尝试了之前的方法后,我在《Big Sur》中发现了这种方法:

sudo gem install -n /usr/local/bin cocoapods

只需导出GEM_HOME:

export GEM_HOME="$HOME/.gem"

然后试试:

gem install cocoapods

您需要安装rbenv并在rbenv下维护ruby版本。

  1. brew install rbenv
  2. rbenv init
  3. eval "$(rbenv init -)"追加到~/.bash_profile
  4. rbenv install {stable_version_#}你可以使用rbenv install -L获取版本号
  5. rbenv global {your_preferred_version_#}命令用于切换到ruby版本
  6. rbenv shell {your_preferred_version_#}
  7. gem install {whatever you want gems}

更多详细信息https://github.com/rbenv/rbenv

我正在使用下面的命令来安装fastlane,但没有工作

安装fastlane -NV

所以使用sudo来安装宝石对我来说是有效的,它就像

sudo gem install fastlane -NV

  1. 通过将家酿传递到您的终端来安装家酿

    /bin/bash -c "$(curl - ssl https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  2. 使用brew安装cocoapods

    酿造安装椰荚

为了解决这个问题,我跑了

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"

然后我打开了一个新的终端。app窗口,再次运行我的gem install命令,它工作了。

我试过了,对我有用 导出路径= / opt /组装/ opt / ruby / bin: / opt /组装/ lib / ruby /珠宝/ 3.0.0 / bin:美元的道路 出口LDFLAGS =“- l / opt /组装/ opt / ruby / lib" 出口CPPFLAGS =“我/ opt /组装/ opt / ruby / include" Gem安装ffi

有同样的错误,因为我在安装ruby后忘记运行以下程序:

source ~/.zshrc - or other ~/…Rc文件,具体取决于您的终端

Rbenv global 2.6.3帮助我解决了这个问题。

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

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安装可可荚 这对我很有效。由于< / p >

在用rbenv安装ruby之后,你还需要设置全局ruby。为此,你可以这样做,rbenv global 3.2.1,然后用gem install bundler安装捆绑器。它会起作用的。

在M1 MacBook Air上测试(假设安装了Homebrew)

下面是上面的答案,我们可以运行:

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

“3.1.2"是我运行chruby时得到的输出。一定要在最后加上这一行。

每次安装新gem时,请记住重新启动终端。

如果您不是默认的Ruby开发人员,那么所有这些答案对您来说都是陌生的。

将所有这些与nodejs中的nvm关联起来

读一下这个简短的信息,然后谢谢我 https://daqo.medium.com/using-chruby-as-the-default-ruby-version-manager-c11346e3cc < / p >

在安装rbenv之后,我也有这个问题,在我的.bashrc中添加这一行:

eval "$(rbenv init -)"

解决了我的问题。

对于最新的操作系统版本

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

这对我很有用

的Mac OS 12及以上版本,也为13 Xcode 14及以上

首先你打电话

< p > export GEM_HOME =“$ HOME / .gem" 在那之后 Gem安装cocoapods

家它帮助你☺️

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

在我的例子中,这个问题与ruby访问有关,ruby路径在我的系统中是如何混乱的。

下面的步骤帮助我解决了这个问题

  1. 打开终端

  2. 使用自制程序安装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. 这一步可能不适用,每个人都可以跳过第10步&11,如果你安装了正确的Cocoapods版本

检查安装的pod的版本

pod --version

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

如果安装的版本是1.11.0

gem uninstall cocoapods -v 1.11.0

  1. 安装特定版本的Cocoapods

    安装cocoapods 1.11.0

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

  3. 在项目目录下安装捆绑器

bundle install

  1. 执行pod安装

pod install