606

我正在尝试使用 安装 gemgem install mygem或使用 更新 RubyGems gem update --system,但失败并出现以下错误:

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

有谁知道如何解决这个问题?

4

30 回答 30

479

尝试添加--user-install而不是使用sudo

gem install mygem --user-install
于 2016-07-08T04:55:46.047 回答
331

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

就是这个意思,你没有权限在那里写。

那是Apple安装的Ruby版本,供他们自己使用。如果您知道自己在做什么,可以对其进行细微修改,因为您不确定权限问题,但我想说继续沿着这条轨道前进并不是一个好主意。

相反,我强烈建议您考虑使用rbenvRVM来管理单独的 Ruby,安装在您的主目录中的沙箱中,您可以修改/折叠/主轴/更改,而不必担心会弄乱系统 Ruby。

在这两者之间,我使用 rbenv,尽管我过去经常使用 RVM。rbenv 采用更“不干涉”的方法来管理您的 Ruby 安装。RVM 有很多功能并且非常强大,但是因此更具侵入性。无论哪种情况,在开始安装您选择的任何一种之前,请阅读它们的安装文档几次。

于 2013-01-30T15:36:52.900 回答
96

你真的应该使用 Ruby 版本管理器。

正确使用一个可以防止并在执行gem update命令时解决您的权限问题。

我推荐rbenv

但是,即使您使用 Ruby 版本管理器,您仍然可能会收到相同的错误消息。

如果你这样做了,并且你正在使用 rbenv,只需验证该~/.rbenv/shims目录是否位于系统 Ruby 的路径之前。

$ echo $PATH 将向您显示加载路径的顺序。

如果您发现您的 shims 目录位于系统 Ruby bin 目录之后,请编辑您的~/.bashrc文件并将其作为最后一个导出 PATH 命令: export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v 向您展示您正在使用的 Ruby 版本

这说明我目前使用的是系统版的Ruby(一般都不好)

$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

$ rbenv global 1.9.3-p448 将我切换到更新的预安装版本(请参阅下面的参考资料)。

这表明我使用的是较新版本的 Ruby(这可能不会导致 Gem::FilePermissionError)

$ ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

您通常不需要在 gem 命令前加上 sudo。如果您觉得有必要这样做,则可能是配置错误。

有关 rbenv 的详细信息,请参阅以下内容:

于 2013-09-01T02:40:51.723 回答
73

你为什么不这样做:

sudo gem update --system
于 2013-06-21T09:30:42.467 回答
65

这将以干净的方式解决 MacOS Mojave 和 Catalina 上的问题:

brew install ruby

然后设置GEM_HOME到您的用户目录。在终端上:

  • Bash

    echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
    echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc
    echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc
    
  • 或者如果在Zsh

    echo '# Install Ruby Gems to ~/gems' >> ~/.zshrc
    echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc
    echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc
    source ~/.zshrc
    
于 2019-01-04T07:49:02.103 回答
35

对我来说,问题是由于使用rbenv并忘记在全局范围内设置正确的版本。

所以我不得不设置它rbenv global xxx

就我而言,我安装了2.0.0-p247,所以我不得不发出命令:

rbenv global 2.0.0-p247
rbenv rehash

然后一切正常。

于 2013-10-21T22:34:44.400 回答
25

你需要更正你的路径。

要确定此修复程序是否有效,请运行以下命令:

which gem

这应该输出一个您无权访问的目录:

/usr/bin/gem

要解决此问题,请执行以下步骤:

  1. 确定您需要复制到您的个人资料的路径:

    rbenv init -
    

    输出的第一行是您需要复制到您的配置文件的行:

    export PATH="/Users/justin/.rbenv/shims:${PATH}" #path that needs to be copied
    source "/usr/local/Cellar/rbenv/0.4.0/libexec/../completions/rbenv.zsh"
    rbenv rehash 2>/dev/null
    rbenv() {
        typeset command
        command="$1"
        if [ "$#" -gt 0 ]; then
            shift
        fi
    
        case "$command" in
            rehash|shell)
                eval `rbenv "sh-$command" "$@"`;;
            *)
                command rbenv "$command" "$@";;
        esac
    }
    
  2. 将路径复制到您的个人资料并保存。

  3. 重新加载您的个人资料(source ~/.zshenv对我而言)。

  4. 运行rbenv rehash

现在,当您运行时,which gem您应该获得一个您有权访问的本地路径:

/Users/justin/.rbenv/shims/gem
于 2014-10-29T21:38:40.647 回答
17

这对我有用。另外,如果您之前以 root 身份安装了 gems,它会通过将所有权更改回您来解决该问题(更好的安全性)。

sudo chown -R `whoami` /Library/Ruby/Gems
于 2016-09-30T20:15:59.067 回答
16
sudo gem update --system
sudo gem install (gemfile)
于 2013-08-05T13:58:06.193 回答
15

有两种途径:使用 rbenv 或 RVM。下面有两种食谱。在此之前,您可能希望关闭 gems 的本地文档安装。

echo "gem: --no-ri --no-rdoc" >> ~/.gemrc

然后:

install rbenv

install ruby-build

跑:

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system

这会在您的本地目录中安装最新版本的 gem 系统。这意味着您不会干扰系统配置。如果你问这个问题,你不应该搞乱系统安全,你会花更长的时间来了解你可能会遇到什么问题,而不仅仅是有一个简单的方法来避免你开始遇到的问题。当您对操作系统和编程有了更多了解后,再学习 InfoSec。

替代使用“RVM”:安装 rvm运行:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

这具有相同的结果,您最终会得到一个不会干扰系统版本的本地 Ruby 和 Gem 系统。不需要 Homebrew,也不需要覆盖系统库等。

于 2014-08-03T23:23:48.450 回答
15

在使用下面的原始答案之前,请尝试nathanwhy 的答案。他的建议--user-install应该达到同样的目的,而不必与你的.bash_profile或确定你的 ruby​​ 版本。


如果您不关心特定的 ruby​​ 版本,您可以跳过繁重的 ruby​​ 环境管理器选项,只需将这些行添加到~/.bash_profile

export GEM_HOME="$HOME/.gem/ruby/2.0.0"
export GEM_PATH="$HOME/.gem/ruby/2.0.0"

路径是从原始输出中窃取的gem env

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - RUBY VERSION: 2.0.0
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
  - RUBY EXECUTABLE: /System/Library/.../2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-14
  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/mylogin/.gem/ruby/2.0.0 # <-- This guy, right here.
     - /System/Library/.../usr/lib/ruby/gems/2.0.0
  ...

不需要sudoing,您可以使用 Apple 提供的已安装的 ruby​​。

于 2015-08-15T17:07:01.073 回答
13

我找到了这个sudo减少宝石的方法:

  1. brew install rbenv ruby-build
  2. sudo gem update --system
  3. 将导出添加到.bashrc

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
    
  4. 最后将其添加到您的~/.gemrc

    gem: -n/usr/local/bin
    
  5. gem update --system

于 2014-10-14T21:41:01.697 回答
12

我需要这样做rbenv rehash,它会指向我当地的 Gem 图书馆。

看起来您的 gem 管理器指向系统库,因此,与其弄乱权限,不如为您的管理器执行相当于“rehash”的操作以使事物指向本地。

于 2013-11-10T18:10:12.590 回答
12

更老更聪明

不要照我说的做,只要知道在使用时要小心sudo。你可能想使用类似的东西rbenv来隔离你正在做的任何工作。


离开

学习关于chown

我不知道您是否喜欢命令行,但这将使使用任何将软件包安装到系统的工具在任何项目上工作变得轻而易举。

chown据我所知,代表变更所有权。

我来寻找这个答案的原因是因为gem install今天向我抛出了这个错误:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /var/lib/gems/1.9.1 directory.

这是一个绝佳的使用机会chown。您会看到 Ruby 为我们提供了它需要访问的目录,而且它似乎是一个它会经常使用的目录。

在这种情况下,解决问题只需要知道三件事,但chown比我现在要演示的要强大得多,并且给你更多的灵活性。请参阅底部的来源以获取更多信息。

两件事

  1. 用户名
  2. 目录

如果您在 shell 中查找用户名很容易。只看提示。我的看起来像:

breadly@breadly-desktop:~\Desktop

当前用户只是@. 我们从错误消息中知道目录,但您有两个选择。您可以使用 将您的权限限制为当前版本,也可以使用../gems/1.9.1授予自己对所有版本的 gems 的写入权限../gems

实际更改所有权的命令如下所示。

chown -R $(whoami) /absolute/path/to/directory

-R称为标志,-R标志通常告诉命令以递归方式执行某些操作,或者换句话说,对目录中包含的所有内容以及目录中包含的所有内容执行命令,依此类推,直到没有别的了。

于 2013-12-24T20:56:29.753 回答
12

我已经格式化了我的 Mac,许多建议的解决方案对我不起作用。对我有用的是这些命令按正确的顺序:

  1. 安装自制软件:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. 安装红宝石:

    brew install ruby
    
  3. 安装指南针:

    sudo gem install compass
    
于 2017-03-03T23:31:03.400 回答
12

sudo chown -R $USER /Library/Ruby/Gems/

于 2019-04-18T11:01:26.557 回答
5

为我工作:

sudo gem uninstall cocoapods

sudo gem install cocoapods
于 2015-06-12T10:06:17.563 回答
5

安装 rbenv brew install rbenv;

然后放在eval "$(rbenv init -)"~/.bash_profile(或MacOS的~/.zshrc)的末尾;

打开一个新的终端并运行gem install ***就可以了!

于 2018-07-17T04:31:57.960 回答
4

检查您的 Ruby 版本是否正确。如果没有,请更改它。

这对我有用:

$ rbenv global 1.9.3-p547
$ gem update --system
于 2015-01-26T07:25:40.317 回答
2

正如 bobbdelsol 所指出的,rehash 对我有用:

==> which ruby
/usr/bin/ruby

==> rbenv install 1.9.3-p551
Downloading ruby-1.9.3-p551.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p551.tar.bz2
Installing ruby-1.9.3-p551...
Installed ruby-1.9.3-p551 to /Users/username/.rbenv/versions/1.9.3-p551


==> which ruby
/Users/username/.rbenv/shims/ruby

==> which gem
/Users/username/.rbenv/shims/gem

==> gem install compass
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> rbenv rehash


==> ruby -v
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.4.0]


==> gem install compass
Fetching: sass-3.4.22.gem (100%)
Fetching: multi_json-1.11.3.gem (100%)
Fetching: compass-core-1.0.3.gem (100%)
Fetching: compass-import-once-1.0.5.gem (100%)
Fetching: chunky_png-1.3.5.gem (100%)
Fetching: rb-fsevent-0.9.7.gem (100%)
Fetching: ffi-1.9.10.gem (100%)
Building native extensions.  This could take a while...
Fetching: rb-inotify-0.9.7.gem (100%)
Fetching: compass-1.0.3.gem (100%)
    Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
Successfully installed sass-3.4.22
Successfully installed multi_json-1.11.3
Successfully installed compass-core-1.0.3
Successfully installed compass-import-once-1.0.5
Successfully installed chunky_png-1.3.5
Successfully installed rb-fsevent-0.9.7
Successfully installed ffi-1.9.10
Successfully installed rb-inotify-0.9.7
Successfully installed compass-1.0.3
9 gems installed
Installing ri documentation for sass-3.4.22...
Installing ri documentation for multi_json-1.11.3...
Installing ri documentation for compass-core-1.0.3...
Installing ri documentation for compass-import-once-1.0.5...
Installing ri documentation for chunky_png-1.3.5...
Installing ri documentation for rb-fsevent-0.9.7...
Installing ri documentation for ffi-1.9.10...
Installing ri documentation for rb-inotify-0.9.7...
Installing ri documentation for compass-1.0.3...
Installing RDoc documentation for sass-3.4.22...
Installing RDoc documentation for multi_json-1.11.3...
Installing RDoc documentation for compass-core-1.0.3...
Installing RDoc documentation for compass-import-once-1.0.5...
Installing RDoc documentation for chunky_png-1.3.5...
Installing RDoc documentation for rb-fsevent-0.9.7...
Installing RDoc documentation for ffi-1.9.10...
Installing RDoc documentation for rb-inotify-0.9.7...
Installing RDoc documentation for compass-1.0.3...
于 2016-04-27T23:08:14.133 回答
2

2021 年解决方案(使用 rvm):

如果你输入which ruby终端,它显示/usr/bin/ruby,你可以试试这个解决方案。

  1. 安装 rvm

    curl -L https://get.rvm.io | bash -s stable
    
  2. 使用 rvm 安装 ruby

    rvm install "ruby-3.0.0"
    
  3. 使用您安装的 ruby​​ 版本

    rvm use ruby-3.0.0
    
  4. 再次输入which ruby,将显示/Users/mac_user_name/.rvm/rubies/ruby-3.0.0/bin/ruby.

    这是使用 ruby​​ 的新途径。

于 2021-10-22T08:37:53.647 回答
1

在 MacOS Mojave 上测试成功:

  1. 卸载所有旧的 ruby​​ 版本(假设你有 2.00 和 2.3.0):

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. 安装全新的 ruby​​ 版本:

    $ brew install ruby

  3. 为您的版本设置默认别名:

    $ rvm alias create default ruby

  4. 重新启动您的系统,因为这是您的计算机加载最近安装的新 ruby​​ 版本的最安全方式。

完成上述过程后,您可以成功运行任何gem命令。

于 2019-04-04T18:06:45.390 回答
0

你可以改变GEM_HOME。您的主目录下还有一个 gem 文件夹来检查它的使用

$ gem env

结果如下。不相关的部分省略。

...
  - GEM PATHS:
     - /Users/xxx/.gem/ruby/2.6.0
     - /Library/Ruby/Gems/2.6.0
     - /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0
...
 

您可以使用您的/Users/xxx/.gem/ruby/2.6.0文件夹。

vim ~/.bash_profile

添加以下行

export GEM_HOME=~/.gem/ruby/2.6.0/

之后你可以使用

source ~/.bash_profile 
于 2021-09-30T07:15:50.633 回答
0

我的问题是我之前从 zshell 切换到 bash 并且没有登录:

/bin/bash --login

虽然我安装了 rvm,但它无法切换到我新安装的 rvm ruby​​ 版本,并且仍在尝试使用 Mac 安装的默认 ruby​​ 二进制文件。因此我的困惑(用户错误!!!)和持续的权限问题......

于 2022-01-26T17:13:19.313 回答
-3

cd /图书馆/Ruby/Gems/2.0.0

打开 。

右键获取信息

单击锁定

放置密码

让一切都可以读写。

于 2014-10-13T00:08:20.497 回答
-4

安装 gem 或更新 RubyGems 失败并出现权限错误然后键入此命令

sudo gem install cocoapods
于 2015-11-18T06:50:39.347 回答
-4

您可以使用: gem install cocoapods --pre --user

于 2018-05-21T07:40:09.130 回答
-5

让用户 $whoami 在这些文件夹中创建一些东西

sudo chown -R user /Library/Ruby/Gems/2.0.0
于 2019-02-12T07:39:20.293 回答
-6

我用过这个并且工作过。

$ sudo chown myuser /var/lib/gems

于 2014-08-27T00:55:08.953 回答
-20

错误的原因是您没有在终端上以 root 用户身份登录。

如果您已经在终端类型的 Mac 上启用了 root 使用权限

$ su

如果您没有 root 用户,则需要使用以下步骤启用它

  1. 从 Apple 菜单中选择系统偏好设置...。
  2. 从视图菜单中选择用户和组。
  3. 单击锁并以管理员帐户身份验证。
  4. 单击登录选项...。
  5. 单击右下角的“编辑...”或“加入...”按钮。
  6. 单击“打开目录实用程序...”按钮。
  7. 单击“目录实用程序”窗口中的锁。
  8. 输入管理员帐户名和密码,然后单击确定。
  9. 从编辑菜单中选择启用根用户。
  10. 在密码和验证字段中输入您希望使用的根密码,然后单击确定。

更多内容请访问http://support.apple.com/kb/ht1528

至少在卡住几个小时后它对我有用。

于 2013-05-10T05:52:35.533 回答