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

尝试安装gem( gem install mygem )或更新RubyGems( gem update --system )失败,并出现此错误:

错误:执行gem时(Gem :: FilePermissionError)
您没有对/Library/Ruby/Gems/2.0.0目录的写入权限。

任何人有想法如何解决这个问题?

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

这意味着,你没有权限写在那里。

这是由Apple安装的Ruby版本,供他们自己使用。 如果你知道自己在做什么 ,可以稍微修改一下 ,因为你对权限问题不确定,所以我认为继续沿着这条路走并不是一个好主意。

相反,我强烈build议你考虑使用rbenv或者RVM来pipe理一个单独的Ruby,安装到你的主目录的沙箱中,你可以修改/折叠/主轴/更改,而不用担心Ruby系统的问题。

在这两者之间,我使用了rbenv,尽pipe过去我使用了很多RVM。 rbenv采取更“放手”的方式来pipe理你的Ruby安装。 RVM有很多function,而且function非常强大,但是结果是更具侵入性。 无论哪种情况,在开始安装之前,请仔细阅读安装文档。

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

gem install mygem --user-install

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

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

我推荐rbenv

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

如果你这样做了,而且你正在使用rbenv,只要确认~/.rbenv/shims目录在系统Ruby的path之前。

$ echo $PATH将显示您的加载path的顺序。

如果您发现您的shims目录export PATH=$HOME/.rbenv/shims:$PATH系统的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命令。 如果您觉得需要这样做,则可能是configuration错误。

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

你为什么不做:

 sudo gem update --system 

对我来说,问题是由于使用rbenv而忘记在全局设置适当的版本。

所以我必须用rbenv global xxx来设置它

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

 rbenv global 2.0.0-p247 rbenv rehash 

然后一切工作正常。

你需要纠正你的path

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

 which gem 

这应该输出一个你没有权限的目录:

 /usr/bin/gem 

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

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

     rbenv init - 

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

 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. 将path复制到您的configuration文件并保存

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

  3. 运行rbenv rehash

现在,当你运行which gem你应该得到一个你有权限的本地path:

 /Users/justin/.rbenv/shims/gem 
 sudo gem update --system sudo gem install (gemfile) 

有两条路线:使用rbenv或RVM。 下面有两个食谱。 在这之前,您可能要closures本地文档的安装。

 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系统。 这意味着你不会干涉系统configuration。 如果你问这个问题,你不应该搞乱系统安全,而是花更长的时间去理解你可能遇到的问题,而不仅仅是一个简单的方法来避免你开始的问题。 以后了解更多关于操作系统和编程的知识时,再学习InfoSec。

替代使用“RVM”代替: 安装rvm run:

 rvm install 2.1.2 rvm use 2.1.2 gem update --system 

这有相同的结果,你最终会有一个本地的Ruby和Gem系统,不会干扰系统版本。 不需要自制软件,或系统库等。

尽pipe很多这些答案是正确的,并且会起作用,但是它们并不是正确的,因为它们代表了一系列不安全的做法,或者只教你如何解决这个问题。

不具有文件夹的正确写入权限是一个常见的问题,您将被困扰是否安装Python包,节点包等。

使用sudo是不安全的,因为它允许软件包安装程序执行任何想要的操作,并在需要的地方安装任何东西。 总之,有人可以编写一个程序包,在你的电脑上安装一个后门程序,窃取你所有的信用卡信息。

使用像rbenv这样的虚拟环境是学习如何做的好事情,因为它允许你打包你的应用程序,并且很容易地发布它。 我强烈build议使用虚拟环境。 而且,如果你不熟练使用虚拟环境,那么你可能会在整个系统上重复安装软件包,而不是全局安装,而是虚拟使用。 我不知道rbenv,但我用Virtualenv做了很多。


真相

答案是chownchown会使你自由。

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

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

我来寻找这个答案的原因是因为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中find用户名很容易。 只要看提示。 我看起来像:

 breadly@breadly-desktop:~\Desktop 

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

实际改变所有权的命令看起来像这样。

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

-R被称为标志,而-R标志通常会指示某个命令recursion地执行某些操作,换句话说就是对目录中包含的每个事物执行命令,以及包含在目录中的所有内容,等到没有别的东西了。

我需要做一个rbenv rehash所以它会指向我当地的gem库。

它看起来像是你的gempipe理器指向系统库,所以,而不是搞乱权限,做相当于你的经理“rehash”让东西指向本地。

我发现这个如何为sudo less 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

为我工作:

 sudo gem uninstall cocoapods sudo gem install cocoapods 

尝试nathanwhy的答案之前使用我原来的答案下面。 他的build议--user-install应该完成同样的目的,而不必与你的.bash_profile或确定你的ruby版本。


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

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

path从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 ... 

没有要求,你可以使用已经安装的ruby,由苹果礼貌。

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

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

我已经格式化了我的Mac,许多build议的解决scheme不适合我。 对我来说,正确的顺序是这些命令:

  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 

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

这适用于我:

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

正如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... 

cd /Library/Ruby/Gems/2.0.0

打开。

点击右键获取信息

单击locking

放置密码

让所有的事情都能读写。

这对我有效。

sudogem更新

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

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

 sudo gem install cocoapods 

我用这个和工作。

$ sudo chown myuser /var/lib/gems

错误的原因是因为您没有以terminal上的root用户身份login。

如果您已经在terminaltypes的Mac上启用了root用户启用

 $ su 

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

  1. 从Apple菜单中select“系统偏好设置…”。
  2. 从视图菜单中select用户和组。
  3. 单击locking并以pipe理员帐户进行身份validation。
  4. 点击login选项…。
  5. 点击右下angular的“修改…”或“join…”button。
  6. 点击“打开目录实用程序…”button。
  7. 单击“目录实用程序”窗口中的locking。
  8. inputpipe理员帐户名称和密码,然后单击确定。
  9. 从编辑菜单中select启用Root用户。
  10. 在“密码”和“validation”字段中input要使用的根密码,然后单击“确定”。

更多相同的http://support.apple.com/kb/ht1528

至less在数小时后卡住了我。