我试图使用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.
有人有解决这个问题的想法吗?
尝试添加--user-install
而不是使用sudo
:
gem install mygem --user-install
if which ruby >/dev/null && which gem >/dev/null; then PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" fi
。 来源:http://guides.rubygems.org/faqs/#user-install - Inder Kumar Rathore你没有写入 /Library/Ruby/Gems/1.8 目录的权限。
这意味着,你没有在那里写入的权限。
那个目录是苹果为自己使用安装的 Ruby 版本。如果你知道自己在做什么,对它进行小的修改是可以的,但由于你不确定权限问题,我建议你不要沿着这条路继续前进。
相反,我强烈建议你考虑使用 rbenv 或 RVM 来管理一个单独的 Ruby,安装到你的主目录下的沙盒中,你可以在不担心损坏系统 Ruby 的情况下修改/折叠/扭曲/更改它。
两者之间,我使用 rbenv,虽然我过去经常使用 RVM。rbenv 采用了更“不干涉”你的 Ruby 安装的方式。RVM 有很多功能,非常强大,但结果是更具侵入性。无论哪种情况,在开始安装任何你选择的东西之前,先阅读其安装文档几次。
brew install ruby
可以以一种干净的方式解决您的依赖问题,而不会破坏 Apple 的安装。如果您已经在初始安装中使用了 sudo
进行更新并担心自己所做的事情,您应该可以通过以下方式撤消它:cd /System/Library/Frameworks/Ruby.framework/Versions;sudo rm Current; sudo ln -s 1.8 Current;
- lslbrew install ruby
后,只需关闭终端并重新打开即可。 - Fmessina你真的应该使用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 的详细信息,请参见以下内容:
rbenv
,按照 Homebrew 安装指南 的步骤进行操作,就不需要自己搞定密码问题了。只需将 eval "$(rbenv init -)"
添加到你的 shell 配置文件中,rbenv
就会为你设置好 PATH
。 - user456814这将以简洁的方式解决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
xcode-select --install
,这才对我起作用。这是编译扩展所必需的。 - Marc Perrin-Pelletier~/.bashrc
或 ~/.zshrc
文件,删除添加的 3 行,并重新运行 source ~/.bashrc
命令,然后应该可以正常工作了。 - Fmessina为什么不这样做:
sudo gem update --system
对我来说,问题是由于使用rbenv
并忘记全局设置正确版本造成的。
因此,我必须使用rbenv global xxx
进行设置。
在我的情况下,我安装了2.0.0-p247
,所以我必须发出以下命令:
rbenv global 2.0.0-p247
rbenv rehash
然后一切正常运作。
rbenv global 2.1.1
,然后运行 rbenv rehash
。现在重新运行 gem install
命令即可。 - njappboyrbenv rehash
。 - Jamesrbenv versions
命令进行验证。 - Dennis你需要更正你的路径。
为了确定这个修复是否有效,请运行以下命令:
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
~/.bash_profile
中包含eval "$(rbenv init -)"
,以使所有必要的更改生效。 - nyi在使用我下面的原始回答之前,请尝试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 line, right here. -----
- /System/Library/.../usr/lib/ruby/gems/2.0.0
...
无需使用 sudo
,您可以使用由苹果提供的预装 Ruby。
这对我很有效。此外,如果您以前使用 root 用户安装了 gem 包,它会通过将所有权更改回您来修复此问题(从安全角度来看更好)。
sudo chown -R `whoami` /Library/Ruby/Gems
/Library
文件夹的权限,否则系统在未来的更新中可能会出现问题。(回复晚了很抱歉) - Raptor有两种方法:使用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 系统。这意味着您不会干扰系统配置。如果您正在问这个问题,那么您不应该干涉系统安全,而且您可能需要更长时间来了解可能遇到的问题,而不仅仅是通过一种简单的方式来避免您开始时的问题。当你对操作系统和编程有更多了解时,再学习信息安全。
作为替代,您可以使用“RVM”:要安装 RVM,请运行:
rvm install 2.1.2
rvm use 2.1.2
gem update --system
这个方法会得到相同的结果,你将得到一个本地的 Ruby 和 Gem 系统,不会干扰系统版本。无需使用 Homebrew 或覆盖系统库等操作。
sudo
是一个命令,用于以超级管理员权限运行该命令后面的操作。chown
命令用于修改文件或目录的拥有者和所属组。-R
表示递归地修改该目录下所有文件和子目录的拥有者。$USER
是一个环境变量,表示当前用户的用户名。 - vaskort