我试图使用gem install mygem或使用gem update——system更新RubyGems安装一个gem,它失败了,错误如下:

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

有人知道怎么解决这个问题吗?


当前回答

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

安装自制程序: /usr/bin/ruby -e "$(curl - ssl https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装Ruby: 编译安装ruby 安装指南: 须藤宝石安装指南针

其他回答

这将以一种干净的方式修复MacOS Mojave和Catalina的问题:

brew install ruby

然后将GEM_HOME设置为您的用户目录。终端:

Bash: echo '#安装Ruby Gems到~/ Gems ' >> ~/.bashrc echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc . txt 源~ / . bashrc 如果在Zsh上: echo '#安装Ruby Gems到~/ Gems ' >> ~/.zshrc echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc . txt 源~ / . zshrc

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

也就是说,你没有权限在那里写东西。

这是苹果安装的Ruby版本,供他们自己使用。虽然如果您知道自己在做什么,可以对其进行一些小的修改,因为您不确定权限问题,但我认为继续这样做并不是个好主意。

相反,我强烈建议您考虑使用rbenv或RVM来管理一个单独的Ruby,将其安装到您的主目录中的沙箱中,这样您就可以修改/折叠/主轴/更改,而不必担心会弄乱系统Ruby。

在这两者之间,我使用rbenv,尽管我过去经常使用RVM。rbenv采用了一种更加“不干涉”的方法来管理Ruby安装。RVM有很多特性并且非常强大,但是,结果是更具有侵入性。无论哪种情况,在开始安装之前,都要多阅读几次安装文档。

我的问题是,我之前从zshell切换到bash,没有登录:

/bin/bash --login

虽然我已经安装了rvm,但它无法切换到我新安装的rvm ruby版本,并且仍然试图使用默认的mac安装的ruby二进制。因此我的困惑(用户错误!!)和持续的权限问题…

您可以更改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 

你需要修正你的路径。

要确定此修复是否有效,请运行以下命令:

which gem

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

/usr/bin/gem

要修复此问题,请执行以下步骤:

Determine the path you need to copy to your profile: rbenv init - The first line of the output is the line you need to copy over to your profile: 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 } Copy the path to your profile and save it. Reload your profile (source ~/.zshenv for me). Run rbenv rehash.

现在当你运行哪个gem时,你应该得到一个你有权限的本地路径:

/Users/justin/.rbenv/shims/gem