如何在权限错误时安装gem或更新RubyGems

639

我试图使用gem install mygem安装一个gem或者使用gem update --system更新RubyGems,但是出现了以下错误:

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

有人有解决这个问题的想法吗?

6
这是我的解决方案: https://dev59.com/1VsX5IYBdhLWcg3wPdU7#34071869 - LanceP
80
sudo chown -R $USER /Library/Ruby/Gems/ 这句话的意思是将 "/Library/Ruby/Gems/" 目录下所有的文件和子目录的拥有者改为当前用户。sudo 是一个命令,用于以超级管理员权限运行该命令后面的操作。chown 命令用于修改文件或目录的拥有者和所属组。-R 表示递归地修改该目录下所有文件和子目录的拥有者。$USER 是一个环境变量,表示当前用户的用户名。 - vaskort
1
我使用的是zsh shell,出现了~/.zshrc路径问题。我在文件末尾加入了以下这行代码,问题得到了解决: export PATH="$HOME/.rbenv/shims:$PATH" - rosnk
32个回答

14

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


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

2
在macOS Mojave中,sudo没有权限。哈哈 - DawnSong

13

我发现了这篇关于无需使用sudo的gem的使用指南

  1. brew install rbenv ruby-build
  2. sudo gem update --system
  3. add exports to .bashrc:

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
    
  4. And finally add this to your ~/.gemrc:

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


我使用了 brew install rbenv ruby-build,然后在我的目录后面出现了一个 system?有什么想法是什么导致了这个问题,以及如何去掉那个 system - 7537247

13

更年长更有经验

不要完全按照我在这里说的做,只要知道在使用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为所有版本的宝石授予写入权限。

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

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

-R被称为标志,通常用于告诉命令递归地执行操作,也就是对目录中包含的所有内容以及包含在其中的目录中的所有内容执行命令,直到没有其他内容为止。


另外,如果您想找出用户属于哪个组,可以参考此链接。https://dev59.com/unRC5IYBdhLWcg3wSu57 - Breedly
3
如果必须安装到/usr/local/bin目录,请注意更改所有权。 - Breedly
16
在/usr、/Library或/var路径下改变任何东西的所有权都是一个不好的主意。这可能导致系统停止运行,因为文件和驱动程序不能再访问,而且如果安装程序感知到这些路径不再由root:wheel拥有,未来的更新可能会中断。修复损坏可能非常困难,通常最好的方法是重新安装操作系统。天真/缺乏经验的用户不了解操作系统中哪些文件/目录可能是安全的,应当告诫他们不要在家里尝试这个操作。 - the Tin Man
1
这是一个令人尴尬的回答。:) 现在我更年长更明智了。 - Breedly

12

我需要执行 rbenv rehash 命令以将其指向本地的Gem库。

看起来你的Gem管理器指向的是系统库,所以不要去处理权限问题,而是执行相当于 "rehash" 的命令来让管理器将事情指向本地。


3
未来的探险家们:rbenv rehash已被弃用。https://github.com/rbenv/rbenv-gem-rehash - TCannadySF

12

我已经格式化了我的Mac,很多人提供的解决方案对我都无效。最终对我有用的是按照正确顺序执行以下命令:

  1. 安装Homebrew:

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

    brew install ruby
    
  4. 安装Compass:

  5. sudo gem install compass
    

你不应该使用sudo来安装gem。使用sudo会将其安装到系统拥有的Ruby中,而不是你自己拥有的Ruby中。在编程时使用沙盒化的Ruby更容易管理和使用,因为你可以创建多个不同的实例并尝试不同的事情,然后在完成时销毁它们。 - the Tin Man

5

通过brew install rbenv来安装rbenv;

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

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


对我没有用。 ``❯ brew install rbenv -q 警告:rbenv 1.1.1 已经安装并且是最新版本。 要重新安装1.1.1,请运行 brew reinstall rbenv~ / .gem / ruby / 2.3.0 / gems / colorls-1.1.1 ❯ eval "$(rbenv init -)"~ / .gem / ruby / 2.3.0 / gems / colorls-1.1.1 ❯ gem update 正在更新已安装的gem 正在更新CFPropertyList 错误:执行gem时出错...(Gem :: FilePermissionError) 您没有写入/Library/Ruby/Gems/2.3.0目录的权限。`` - Max Coplan

5

解决问题的步骤:

第一步:使用 Homebrew 检查并安装 CocoaPods

brew install cocoapods

步骤2:这是最重要的,解决所有问题,安装带有稳定Ruby版本的rvm软件包,否则您将访问System文件夹中没有权限的Ruby版本。

\curl -sSL https://get.rvm.io | bash -s stable --ruby

步骤三:将rvm命令路径添加到.zshrc文件中,以便全局访问

export PATH="$PATH:$HOME/.rvm/scripts/rvm"

步骤4:检查rvm在全局命令行中是否正常运行

rvm --version 

第五步:现在,您可以在用户bin中安装cocoapods包,因为这将访问rvm文件夹中的ruby文件,无需任何权限即可进行。
sudo gem install -n /usr/local/bin cocoapods

步骤6:现在您可以使用以下命令检查Pod

pod install

这是唯一一个让我在MacOS 13 Ventura上安装Cocoapods的答案。谢谢。 - Matt

4

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

以下方法适用于我:

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

这是更好的解决方案:update > chown。谢谢!我还需要运行brew install ruby - Jose Llausas

4

我的工作要求:

sudo gem uninstall cocoapods

sudo gem install cocoapods

非常棒,我也试过了!谢谢。省去了安装rbenv或RVM的麻烦。 - NaXir
5
因为在其他评论中已经指出,以root权限安装gems是一种危险的做法,所以进行了贬低。安装程序可以对您的系统进行任何操作。 - Some Guy
@SomeGuy:“安装程序可以做任何事情”……更有可能是用户自己输错了命令,搞糟了系统。我想不起来有一次安装程序弄坏了我的系统,但我清楚地记得我自己曾经搞砸过几次。sudo是新手喜欢的命令,因为它使得轻易地做错事情成为可能,而要学会在使用时适当地保持警惕则需要多年时间。 - the Tin Man
1
最佳答案!!!运行这两个命令后,请重新启动终端,就这样了!!!非常感谢!!! - nosequeweaponer

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