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

Gau*_*rav 546 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.
Run Code Online (Sandbox Code Playgroud)

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

nat*_*why 403

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

gem install mygem --user-install
Run Code Online (Sandbox Code Playgroud)

  • 这需要登顶!使用sudo或su进行安装是一个坏主意,因为您在模块上强制执行权限系统,并且可能全局安装的软件包可能会与其他已安装的软件包或其他项目的依赖项发生冲突.使用rbenv需要您安装另一个软件并增加一层复杂性. (7认同)
  • 这有效,但警告:'警告:你的PATH中没有/Users/<username>/.gem/ruby/2.0.0/bin,宝石可执行文件将无法运行.以下链接提供了有关如何更新路径的有用说明(无需使用vi)http://hathaway.cc/post/69201163472/how-to-edit-your-path-environment-variables-on-mac (7认同)
  • 我不知道为什么你之前的答案没有发布.`--user-install`选项显然已经存在了一段时间.](http://www.binarytides.com/quick-tip-installing-ruby-gems-in-the-users-home-directory/我只是希望你早点写过这篇文章.=) (4认同)
  • 这很简单而且合乎逻辑.如果你没有在你的bashrc中添加ruby路径`if ruby​​>/dev/null && which gem>/dev/null; 然后PATH ="$(ruby -rubygems -e'把Gem.user_dir')/ bin:$ PATH"fi` <br>来源:http://guides.rubygems.org/faqs/#user-install (4认同)

the*_*Man 311

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

就是说,你没有在那里写的权限.

这是Apple安装的Ruby版本,供自己使用.如果您知道自己在做什么,可以对其进行微小修改,但由于您不确定权限问题,我会说继续沿着这条轨道进行不是一个好主意.

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

在两者之间,我使用rbenv,尽管我过去常常使用RVM.rbenv采用更"不干涉"的方法来管理Ruby安装.RVM具有很多功能并且功能非常强大,但结果却更具侵入性.在任何一种情况下,在开始安装之前,请阅读几次安装文档,无论您选择哪个.

  • 对于像我这样的人,他们实际上并没有做任何红宝石开发,也不想乱七八小时试图找出所有这些水晶的东西.`brew install ruby​​`将以一种干净的方式解决你的依赖问题,而不会破坏苹果的安装.如果你已经'sudo`对初始安装进行了更新,并且担心你做了什么,你应该可以用它来解除它:`cd /System/Library/Frameworks/Ruby.framework/Versions ; sudo rm Current; sudo ln -s 1.8当前;` (200认同)
  • 但是,您不需要使用单独的Ruby库.就像迈克尔上面提到的那样,把'sudo'放在你面前. (176认同)
  • 解决了:在执行'brew install ruby​​'之后在El Captain上关闭终端并重新打开它. (55认同)
  • 更改Apple安装Ruby的所有权并不是一个好主意,因为系统安装/升级,而磁盘工具可以自动恢复/修复目录的所有权和权限.这将使用户感到沮丧,并且可能会使期望具有这些目录的写权限/所有权的操作系统和代码受挫.Apple安装使用其Ruby的应用程序并且可能期望某个版本或行为,因此这些可能会破坏.为什么要使用RVM或rbenv更容易,更安全而不用担心它. (37认同)
  • "`我做了sudo纠结,最后修改了我预先安装的Ruby.我做了你的步骤试图解决问题,但现在当我做irb或ruby -v时,我发现命令没有找到.发生了什么事,是有一个修复`"这只会增加人们不应该使用`sudo`或`chown`的原因.叹.... (21认同)
  • 执行`brew install ruby​​`(花了5分钟才能运行)并没有解决我的权限问题.我将尝试使用Ruby版本管理器的其他建议...... (13认同)
  • 我认为该目录的'chown'将是一个更好的主意.因为做'sudo'会让gem install做任何他想要的任何事情.如果它是一个邪恶的安装脚本,这可能是坏的.问题是我该向谁展示,以及在哪里? (12认同)
  • 我用自制软件安装了ruby,我还在处理这个问题.似乎无法弄清楚...... (3认同)
  • @Louis我做了sudo纠结,并修改了我预装的Ruby.我已经尝试了解决问题的步骤,但现在当我执行irb或ruby -v时,我发现命令未找到.发生了什么,是否有修复? (2认同)
  • 是/System/Library/Frameworks/Ruby.framework/Versions/Current指向什么?您可能安装了不同的版本.Current只是它应该使用的当前版本的符号链接,在我的情况下,在我升级之前,apple install是1.8,所以我只是将符号链接指向它. (2认同)
  • 永远不要使用 SUDO,如果你必须这样做,你在设置中做错了。请使用 rbenv 或 rvm。 (2认同)
  • @Fmessina您的解决方案无效。即使再次关闭和打开终端后仍然出现相同的错误 (2认同)
  • @Fmessina我的`gem`在运行`brew install ruby​​`后仍然指向`/ usr / bin / gem`。我需要做些什么来更改默认的“ ruby​​”,“ gem”和“ irb”命令吗? (2认同)

l3x*_*l3x 90

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

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

我推荐rbenv.

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

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

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

如果您发现shims目录位于系统Ruby bin目录之后,则编辑您的~/.bashrc文件并将其作为最后一个export 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]
Run Code Online (Sandbox Code Playgroud)

$ 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]
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果您使用`rbenv`,如果您按照[Homebrew安装说明](https://github.com/sstephenson/rbenv#homebrew-on-mac-os),您不应该自己搞乱通行证-x),你所要做的就是在你的shell配置中添加`eval"$(rbenv init - )"`,`rbenv`应该为你设置你的'PATH`. (7认同)
  • 永远不要使用SUDO - 这对我来说非常有用,很明确 (3认同)

Bob*_*obz 75

你为什么不这样做:

sudo gem update --system
Run Code Online (Sandbox Code Playgroud)

  • 以root身份安装gem并不是一个好主意.http://stackoverflow.com/questions/2119064/sudo-gem-install-or-gem-install-and-gem-locations (39认同)
  • 为什么每个人都会回答权限问题,只是总是在命令面前抛出sudo?这个最佳实践怎么样? (14认同)
  • 永远不要使用SUDO,如果你必须这样做,你在设置中做错了.请使用rbenv或rvm. (12认同)

Fme*_*ina 35

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

brew install ruby
Run Code Online (Sandbox Code Playgroud)

然后将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
Run Code Online (Sandbox Code Playgroud)

或如果在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
Run Code Online (Sandbox Code Playgroud)

  • 您是怎么发现的?工作了! (2认同)
  • 你是男人!高五,真的很像魅力。非常感谢。 (2认同)
  • 请注意,执行此操作后,您应该按照许多安装指南的指示使用“gem install ...”而不是“sudo gem install ...” (2认同)

Hen*_*rik 34

对我来说,问题是由于使用rbenv和忘记在全局设置正确的版本.

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

在我的情况下,我安装,2.0.0-p247所以我不得不发出命令:

rbenv global 2.0.0-p247
rbenv rehash
Run Code Online (Sandbox Code Playgroud)

然后一切都很好.

  • 对于那些已经使用rbenv并在将OSX升级到更新版本后安装gems时开始收到Permission错误的人:您应该首先设置rbenv版本`rbenv global 2.1.1`然后使用`rbenv rehash`.现在重新运行`gem install`命令. (3认同)

Jus*_*eck 23

你需要纠正你的路径

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

which gem
Run Code Online (Sandbox Code Playgroud)

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

/usr/bin/gem
Run Code Online (Sandbox Code Playgroud)

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

  1. 确定复制到配置文件所需的路径:

    rbenv init -
    
    Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)
  1. 将路径复制到您的配置文件并保存

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

  3. source ~/.zshenv

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

/Users/justin/.rbenv/shims/gem
Run Code Online (Sandbox Code Playgroud)


小智 17

sudo gem update --system
sudo gem install (gemfile)
Run Code Online (Sandbox Code Playgroud)

  • 正如其他人指出的那样,不建议使用sudo (3认同)
  • 在 macOS Mojave 中,“sudo”没有权限。哈哈 (2认同)

the*_*ski 16

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

sudo chown -R `whoami` /Library/Ruby/Gems
Run Code Online (Sandbox Code Playgroud)


Jez*_*ezC 15

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

echo "gem: --no-ri --no-rdoc" >> ~/.gemrc
Run Code Online (Sandbox Code Playgroud)

然后:

install rbenv

install ruby-build

跑:

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system
Run Code Online (Sandbox Code Playgroud)

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

替代使用'RVM'代替:安装rvm run:

rvm install 2.1.2
rvm use 2.1.2
gem update --system
Run Code Online (Sandbox Code Playgroud)

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


gop*_*pek 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"
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后将此添加到您的~/.gemrc:

    gem: -n/usr/local/bin
    
    Run Code Online (Sandbox Code Playgroud)
  5. gem update --system


Mic*_*ael 13

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


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

export GEM_HOME="$HOME/.gem/ruby/2.0.0"
export GEM_PATH="$HOME/.gem/ruby/2.0.0"
Run Code Online (Sandbox Code Playgroud)

该路径从原始输出中被盗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
  ...
Run Code Online (Sandbox Code Playgroud)

没有sudo必要,你可以使用已经安装的红宝石,礼貌的苹果.

  • +1:这对我很有用.并非所有人都是他们使用的机器的系统管理员,因此不是每个人都可以访问"sudo","chown"或类似的工具.类似地,人们应该知道"gem install --user-install",它将gem安装到用户主目录中的目录,而不是所有用户共享的目录. (3认同)

bob*_*sol 12

我需要这样做rbenv rehash,它会指向我当地的宝石图书馆.

看起来你已经让你的gem管理器指向系统库,因此,不要乱用权限,而是为你的经理做一个"rehash",以使事情指向本地.

  • 未来的探索者:rbenv rehash已被弃用https://github.com/rbenv/rbenv-gem-rehash (3认同)

Bre*_*dly 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.
Run Code Online (Sandbox Code Playgroud)

这是一个绝佳的使用机会chown.你看到Ruby给了我们需要访问的目录,看起来它是一个经常使用的目录.

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

两件事

  1. 用户名
  2. 目录

如果你在shell中发现用户名很简单.看看提示.我看起来像:

breadly@breadly-desktop:~\Desktop
Run Code Online (Sandbox Code Playgroud)

当前用户只是之前的名字@.我们知道错误消息中的目录,但您有两个选择.您可以通过使用来限制对当前版本的许可../gems/1.9.1,或者通过使用为自己写入所有版本的gems的写权限../gems.

实际更改所有权的命令看起来像这样.

chown -R $(whoami) /absolute/path/to/directory
Run Code Online (Sandbox Code Playgroud)

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

  • 更改/ usr,/ Library或/ var路径中的任何内容的所有权都是一个坏主意.由于文件和驱动程序不再可访问,系统可能会暂停,如果安装程序检测到路径不再由root:wheel拥有,则将来的更新可能会中断.修复损坏可能非常困难,通常最好通过重新安装操作系统来完成.天真/没有经验的用户对操作系统知之甚少,无法理解哪些文件/目录可能是安全的,应该提醒他们不要在家里试试. (16认同)
  • 但是,如果必须安装到/ usr/local/bin目录,您可能需要小心更改所有权. (3认同)

Her*_*ini 11

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

  1. 安装Homebrew:

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

    brew install ruby
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装指南针:

    sudo gem install compass
    
    Run Code Online (Sandbox Code Playgroud)


vas*_*ort 9

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


evy*_*vya 5

为我工作:

sudo gem uninstall cocoapods

sudo gem install cocoapods
Run Code Online (Sandbox Code Playgroud)

  • 正如其他评论中所指出的那样,贬低是因为以root身份安装宝石是一种危险的做法.安装程序可以对您的系统执行任何操作. (5认同)

小智 5

安装 rbenv brew install rbenv

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

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


Cod*_*Era 5

解决问题的步骤:

第1步:使用homebrew检查并安装cocoapods

brew install cocoapods
Run Code Online (Sandbox Code Playgroud)

步骤2:这是最重要的,要解决所有问题,请安装具有稳定ruby版本的rvm包,否则您将在没有权限的系统文件夹中访问ruby版本。

\curl -sSL https://get.rvm.io | bash -s stable --ruby
Run Code Online (Sandbox Code Playgroud)

步骤3:将rvm命令路径添加到.zshrc文件以全局访问它

export PATH="$PATH:$HOME/.rvm/scripts/rvm"
Run Code Online (Sandbox Code Playgroud)

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

rvm --version 
Run Code Online (Sandbox Code Playgroud)

第5步:现在您可以在用户bin中安装cocoapods包,因为这将从rvm文件夹访问ruby文件,无需任何权限。

sudo gem install -n /usr/local/bin cocoapods
Run Code Online (Sandbox Code Playgroud)

第 6 步:现在您还可以使用以下命令检查 pod

pod install
Run Code Online (Sandbox Code Playgroud)