安装gem或更新RubyGems失败,出现权限错误

时间:2013-01-30 15:10:15

标签: ruby macos rubygems

尝试安装gem(gem 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.

任何人都知道如何解决这个问题?

27 个答案:

答案 0 :(得分:347)

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

gem install mygem --user-install

答案 1 :(得分:296)

  

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

就是说,你没有权限在那里写作。

这是Apple安装的Ruby版本,供自己使用。虽然如果你知道你正在做什么进行微小的修改是可以的,但是因为你不确定权限问题,我会说继续沿着那条轨道进行不是一个好主意。

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

在两者之间,我使用rbenv,虽然我过去经常使用RVM。 rbenv采用更“不干涉”的方法来管理Ruby安装。 RVM具有很多功能并且功能非常强大,但结果却更具侵入性。在任何一种情况下,阅读他们的安装文档几次,然后开始安装你选择的任何一个。

答案 2 :(得分:87)

你真的应该使用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]

您通常不需要在sudo前面添加gem命令。如果您觉得有必要这样做,可能会出现配置错误。

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

答案 3 :(得分:76)

你为什么不这样做:

sudo gem update --system

答案 4 :(得分:30)

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

所以我必须用rbenv global xxx

设置它

在我的情况下,我安装了2.0.0-p247所以我必须发出命令:

rbenv global 2.0.0-p247
rbenv rehash

然后一切正常。

答案 5 :(得分:22)

这将以一种干净的方式解决 MacOs Mojave 上的问题:

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

答案 6 :(得分:22)

您需要更正路径

要确定此修复程序是否有效,请执行以下操作:

which gem

这应输出您没有权限的目录:

/usr/bin/gem

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

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

    rbenv init -
    
  2. 输出的第一行是您需要复制到个人资料的行:

    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
    }
    
    1. 将路径复制到您的个人资料并保存

    2. 重新加载您的个人资料(来源〜/ .zshenv给我)

    3. 运行rbenv rehash

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

      /Users/justin/.rbenv/shims/gem
      

答案 7 :(得分:17)

sudo gem update --system
sudo gem install (gemfile)

答案 8 :(得分:14)

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

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'代替:install rvm运行:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

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

答案 9 :(得分:13)

我找到this how-to for sudoless gem

  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

答案 10 :(得分:13)

在使用下面的原始答案之前尝试nathanwhy's answer。他对--user-install的建议应该达到同样的目的,而不必篡改你的.bash_profile或确定你的红宝石版本。

如果您不关心特定的ruby版本,可以跳过heavy-lift ruby environment manager options,只需将这些行添加到~/.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
  ...

不需要sudo,你可以使用已安装的红宝石,由Apple提供。

答案 11 :(得分:13)

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

sudo chown -R `whoami` /Library/Ruby/Gems

答案 12 :(得分:12)

年龄更大,更聪明

不要做我在这里说的话,只要知道在任何时候使用sudo都要小心。您可能希望使用rbenv之类的东西来隔离您正在做的任何工作。


一种方式

learn about 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. 目录
  3. 如果你在shell中发现用户名很简单。看看提示。我看起来像:

    breadly@breadly-desktop:~\Desktop
    

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

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

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

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

答案 13 :(得分:12)

我需要做一个rbenv rehash所以它会指向我当地的Gem图书馆。

看起来你的gem管理器指向系统库,所以,不要乱用权限,而是为你的经理做一个“rehash”,以便让事情指向本地。

答案 14 :(得分:11)

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

  1. 安装Homebrew:

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

    brew install ruby
    
  3. 安装指南针:

    sudo gem install compass
    

答案 15 :(得分:5)

为我工作:

sudo gem uninstall cocoapods

sudo gem install cocoapods

答案 16 :(得分:4)

通过brew install rbenv安装rbenv;

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

打开一个新终端并运行gem install ***即可!

答案 17 :(得分:3)

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

这对我有用:

$ rbenv global 1.9.3-p547
$ gem update --system

答案 18 :(得分:3)

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

答案 19 :(得分: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...

答案 20 :(得分:0)

在MacOS Mojave上成功测试:

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

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. 安装全新的红宝石版本:

    $ brew install ruby

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

    $ rvm alias create default ruby

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

完成上述步骤后,即可成功运行任何gem命令。

答案 21 :(得分:-2)

cd /Library/Ruby/Gems/2.0.0

打开。

右键点击获取信息

点击锁定

放置密码

让所有内容都能读写。

答案 22 :(得分:-2)

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

sudo chown -R user /Library/Ruby/Gems/2.0.0

答案 23 :(得分:-3)

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

答案 24 :(得分:-4)

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

sudo gem install cocoapods

答案 25 :(得分:-6)

我用过这个并且工作过。

$ sudo chown myuser /var/lib/gems

答案 26 :(得分:-17)

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

如果您已在终端类型

中的mac上启用root用户
$ su

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

  1. 从Apple菜单中选择系统偏好设置...。
  2. 从“查看”菜单中选择“用户&amp;基团。
  3. 单击锁定并以管理员帐户进行身份验证。
  4. 单击“登录选项...”。
  5. 点击右下角的“编辑...”或“加入...”按钮。
  6. 单击“打开目录实用程序...”按钮。
  7. 单击“目录实用程序”窗口中的锁定。
  8. 输入管理员帐户名和密码,然后单击“确定”。
  9. 从“编辑”菜单中选择“启用Root用户”。
  10. 在“密码”和“验证”字段中输入要使用的root密码,然后单击“确定”。
  11. http://support.apple.com/kb/ht1528

    上有更多内容

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