安装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
要解决此问题,请执行以下步骤。
-
确定您需要复制到您的个人资料的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 }
-
将path复制到您的configuration文件并保存
-
重新加载你的个人资料(source〜/ .zshenv)
-
运行
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做了很多。
真相
答案是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
要强大得多,比现在我要演示的还要灵活得多。 有关更多信息,请参阅底部的源代码。
两件事
- 用户名
- 目录
如果你在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 :
-
brew install rbenv ruby-build
-
sudo gem update --system
-
添加导出到
.bashrc
:export RBENV_ROOT="$(brew --prefix rbenv)" export GEM_HOME="$(brew --prefix)/opt/gems" export GEM_PATH="$(brew --prefix)/opt/gems"
-
最后把这个添加到你的
~/.gemrc
:gem: -n/usr/local/bin
-
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不适合我。 对我来说,正确的顺序是这些命令:
-
安装Homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
-
安装Ruby:
brew install ruby
-
安装指南针:
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用户,则需要使用以下步骤启用它
- 从Apple菜单中select“系统偏好设置…”。
- 从视图菜单中select用户和组。
- 单击locking并以pipe理员帐户进行身份validation。
- 点击login选项…。
- 点击右下angular的“修改…”或“join…”button。
- 点击“打开目录实用程序…”button。
- 单击“目录实用程序”窗口中的locking。
- inputpipe理员帐户名称和密码,然后单击确定。
- 从编辑菜单中select启用Root用户。
- 在“密码”和“validation”字段中input要使用的根密码,然后单击“确定”。
更多相同的http://support.apple.com/kb/ht1528
至less在数小时后卡住了我。