我正在尝试使用 安装 gemgem 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.
有谁知道如何解决这个问题?
尝试添加--user-install
而不是使用sudo
:
gem install mygem --user-install
您没有对 /Library/Ruby/Gems/1.8 目录的写入权限。
就是这个意思,你没有权限在那里写。
那是Apple安装的Ruby版本,供他们自己使用。如果您知道自己在做什么,可以对其进行细微修改,因为您不确定权限问题,但我想说继续沿着这条轨道前进并不是一个好主意。
相反,我强烈建议您考虑使用rbenv或RVM来管理单独的 Ruby,安装在您的主目录中的沙箱中,您可以修改/折叠/主轴/更改,而不必担心会弄乱系统 Ruby。
在这两者之间,我使用 rbenv,尽管我过去经常使用 RVM。rbenv 采用更“不干涉”的方法来管理您的 Ruby 安装。RVM 有很多功能并且非常强大,但是因此更具侵入性。无论哪种情况,在开始安装您选择的任何一种之前,请阅读它们的安装文档几次。
你真的应该使用 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]
您通常不需要在 gem 命令前加上 sudo。如果您觉得有必要这样做,则可能是配置错误。
有关 rbenv 的详细信息,请参阅以下内容:
你为什么不这样做:
sudo gem update --system
这将以干净的方式解决 MacOS Mojave 和 Catalina 上的问题:
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
对我来说,问题是由于使用rbenv
并忘记在全局范围内设置正确的版本。
所以我不得不设置它rbenv global xxx
就我而言,我安装了2.0.0-p247
,所以我不得不发出命令:
rbenv global 2.0.0-p247
rbenv rehash
然后一切正常。
你需要更正你的路径。
要确定此修复程序是否有效,请运行以下命令:
which gem
这应该输出一个您无权访问的目录:
/usr/bin/gem
要解决此问题,请执行以下步骤:
确定您需要复制到您的个人资料的路径:
rbenv init -
输出的第一行是您需要复制到您的配置文件的行:
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
}
将路径复制到您的个人资料并保存。
重新加载您的个人资料(source ~/.zshenv
对我而言)。
运行rbenv rehash
。
现在,当您运行时,which gem
您应该获得一个您有权访问的本地路径:
/Users/justin/.rbenv/shims/gem
这对我有用。另外,如果您之前以 root 身份安装了 gems,它会通过将所有权更改回您来解决该问题(更好的安全性)。
sudo chown -R `whoami` /Library/Ruby/Gems
sudo gem update --system
sudo gem install (gemfile)
有两种途径:使用 rbenv 或 RVM。下面有两种食谱。在此之前,您可能希望关闭 gems 的本地文档安装。
echo "gem: --no-ri --no-rdoc" >> ~/.gemrc
然后:
跑:
rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system
这会在您的本地目录中安装最新版本的 gem 系统。这意味着您不会干扰系统配置。如果你问这个问题,你不应该搞乱系统安全,你会花更长的时间来了解你可能会遇到什么问题,而不仅仅是有一个简单的方法来避免你开始遇到的问题。当您对操作系统和编程有了更多了解后,再学习 InfoSec。
替代使用“RVM”:安装 rvm运行:
rvm install 2.1.2
rvm use 2.1.2
gem update --system
这具有相同的结果,您最终会得到一个不会干扰系统版本的本地 Ruby 和 Gem 系统。不需要 Homebrew,也不需要覆盖系统库等。
在使用下面的原始答案之前,请尝试nathanwhy 的答案。他的建议--user-install
应该达到同样的目的,而不必与你的.bash_profile
或确定你的 ruby 版本。
如果您不关心特定的 ruby 版本,您可以跳过繁重的 ruby 环境管理器选项,只需将这些行添加到~/.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
ing,您可以使用 Apple 提供的已安装的 ruby。
我找到了这个sudo
减少宝石的方法:
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
我需要这样做rbenv rehash
,它会指向我当地的 Gem 图书馆。
看起来您的 gem 管理器指向系统库,因此,与其弄乱权限,不如为您的管理器执行相当于“rehash”的操作以使事物指向本地。
更老更聪明
不要照我说的做,只要知道在使用时要小心sudo
。你可能想使用类似的东西rbenv
来隔离你正在做的任何工作。
我不知道您是否喜欢命令行,但这将使使用任何将软件包安装到系统的工具在任何项目上工作变得轻而易举。
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 中查找用户名很容易。只看提示。我的看起来像:
breadly@breadly-desktop:~\Desktop
当前用户只是@
. 我们从错误消息中知道目录,但您有两个选择。您可以使用 将您的权限限制为当前版本,也可以使用../gems/1.9.1
授予自己对所有版本的 gems 的写入权限../gems
。
实际更改所有权的命令如下所示。
chown -R $(whoami) /absolute/path/to/directory
被-R
称为标志,-R
标志通常告诉命令以递归方式执行某些操作,或者换句话说,对目录中包含的所有内容以及目录中包含的所有内容执行命令,依此类推,直到没有别的了。
我已经格式化了我的 Mac,许多建议的解决方案对我不起作用。对我有用的是这些命令按正确的顺序:
安装自制软件:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装红宝石:
brew install ruby
安装指南针:
sudo gem install compass
sudo chown -R $USER /Library/Ruby/Gems/
为我工作:
sudo gem uninstall cocoapods
sudo gem install cocoapods
安装 rbenv brew install rbenv
;
然后放在eval "$(rbenv init -)"
~/.bash_profile(或MacOS的~/.zshrc)的末尾;
打开一个新的终端并运行gem install ***
就可以了!
检查您的 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...
2021 年解决方案(使用 rvm):
如果你输入which ruby
终端,它显示/usr/bin/ruby
,你可以试试这个解决方案。
安装 rvm
curl -L https://get.rvm.io | bash -s stable
使用 rvm 安装 ruby
rvm install "ruby-3.0.0"
使用您安装的 ruby 版本
rvm use ruby-3.0.0
再次输入which ruby
,将显示/Users/mac_user_name/.rvm/rubies/ruby-3.0.0/bin/ruby
.
这是使用 ruby 的新途径。
在 MacOS Mojave 上测试成功:
卸载所有旧的 ruby 版本(假设你有 2.00 和 2.3.0):
$ rvm uninstall 2.0.0
$ rvm uninstall 2.3.0
安装全新的 ruby 版本:
$ brew install ruby
为您的版本设置默认别名:
$ rvm alias create default ruby
重新启动您的系统,因为这是您的计算机加载最近安装的新 ruby 版本的最安全方式。
完成上述过程后,您可以成功运行任何gem
命令。
你可以改变GEM_HOME
。您的主目录下还有一个 gem 文件夹来检查它的使用
$ gem env
结果如下。不相关的部分省略。
...
- GEM PATHS:
- /Users/xxx/.gem/ruby/2.6.0
- /Library/Ruby/Gems/2.6.0
- /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0
...
您可以使用您的/Users/xxx/.gem/ruby/2.6.0
文件夹。
vim ~/.bash_profile
添加以下行
export GEM_HOME=~/.gem/ruby/2.6.0/
之后你可以使用
source ~/.bash_profile
我的问题是我之前从 zshell 切换到 bash 并且没有登录:
/bin/bash --login
虽然我安装了 rvm,但它无法切换到我新安装的 rvm ruby 版本,并且仍在尝试使用 Mac 安装的默认 ruby 二进制文件。因此我的困惑(用户错误!!!)和持续的权限问题......
cd /图书馆/Ruby/Gems/2.0.0
打开 。
右键获取信息
单击锁定
放置密码
让一切都可以读写。
安装 gem 或更新 RubyGems 失败并出现权限错误然后键入此命令
sudo gem install cocoapods
您可以使用: gem install cocoapods --pre --user
让用户 $whoami 在这些文件夹中创建一些东西
sudo chown -R user /Library/Ruby/Gems/2.0.0
我用过这个并且工作过。
$ sudo chown myuser /var/lib/gems
错误的原因是您没有在终端上以 root 用户身份登录。
如果您已经在终端类型的 Mac 上启用了 root 使用权限
$ su
如果您没有 root 用户,则需要使用以下步骤启用它
更多内容请访问http://support.apple.com/kb/ht1528
至少在卡住几个小时后它对我有用。