【问题标题】:Why do I get a "permission denied" error while installing a gem?为什么在安装 gem 时出现“权限被拒绝”错误?
【发布时间】:2013-07-07 05:13:33
【问题描述】:

我正在尝试安装 Jekyll。运行gem install jekyll 后出现此错误:

ERROR:  While executing gem ... (Errno::EACCES)
    Permission denied - /usr/local/lib/ruby/gems/2.0.0/gems/jekyll-1.0.3/CONTRIBUTING.md

当我运行 gem list 时,我可以看到 Jekyll 已安装,所以我完全糊涂了:

*** LOCAL GEMS ***

bigdecimal (1.2.0)
classifier (1.3.3)
colorator (0.1)
commander (4.1.3)
directory_watcher (1.4.1)
fast-stemmer (1.0.2)
highline (1.6.19)
io-console (0.4.2)
jekyll (1.0.3)
json (1.7.7)
kramdown (1.0.2)
liquid (2.5.0)
maruku (0.6.1)
minitest (4.3.2)
posix-spawn (0.3.6)
psych (2.0.0)
pygments.rb (0.5.1)
rake (0.9.6)
rdoc (4.0.0)
rubygems-update (2.0.3)
safe_yaml (0.7.1)
syntax (1.0.0)
test-unit (2.0.0.0)
yajl-ruby (1.1.0)

过去我的用户路径有很多问题,所以我想知道这个错误是否与此有关?

这是gem env的输出:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.3
  - RUBY VERSION: 2.0.0 (2013-02-24 patchlevel 0) [x86_64-darwin12.3.0]
  - INSTALLATION DIRECTORY: /usr/local/Cellar/ruby/2.0.0-p0/lib/ruby/gems/2.0.0
  - RUBY EXECUTABLE: /usr/local/Cellar/ruby/2.0.0-p0/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/Cellar/ruby/2.0.0-p0/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-12
  - GEM PATHS:
     - /usr/local/Cellar/ruby/2.0.0-p0/lib/ruby/gems/2.0.0
     - /Users/me/.gem/ruby/2.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/

这是我的“.bash_profile”:

export PATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
PATH=$PATH:above/path/to/gems

source ~/.rvm/scripts/rvm

有人可以帮我安装 Jekyll,或者至少解决这个权限错误吗?

【问题讨论】:

标签: ruby macos jekyll


【解决方案1】:

您的 Ruby 安装在 /usr/local/Cellar/ruby/...

这是一个受限制的路径,只有在您使用提升的权限时才能写入,无论是以 root 身份运行还是使用 sudo。我不建议您以 root 身份运行,因为您不了解路径和权限是如何工作的。您可以使用sudo gem install jekyll,这将暂时提升您的权限,为您的命令提供写入该目录所需的权限。

但是,我建议您认真考虑不要这样做,而是使用您的 RVM 将 Ruby 安装到您自己的主目录中,这样您就可以在没有权限问题的情况下自动安装 Ruby 和 gems。请参阅“Single-User installations”中安装到本地 RVM 沙箱的说明。

因为您的~/.bash_profile 中有 RVM,但它没有显示在您的 Gem 环境列表中,我怀疑您要么没有按照正确安装 RVM 的说明进行操作,要么您没有使用所有-重要命令:

rvm use 2.0.0 --default

配置默认的 Ruby。

对于大多数用户来说,“单用户安装”是可行的方式。如果您必须在该配置中使用sudo,那么您做错了。

【讨论】:

  • 感谢您说得这么清楚。我已经重新安装并安装了 RVM。一切正常。
  • 我发现你的解释,尤其是你的最后一段最有帮助。
【解决方案2】:

我想分享我为自己解决了这个问题所遵循的步骤,希望它可以帮助其他人(同时也提醒我,以防类似的事情再次发生)

我遇到的问题(与 OP 相同)可能与使用 homebrew 安装 Ruby 有关。

为了解决这个问题,我首先更新了自制软件:

brew update && brew upgrade
brew doctor

(如果 brew doctor 出现任何问题,请先修复它们。)然后我卸载了 ruby​​

brew uninstall ruby

如果此时 安装了 rbenv,则

brew install rbenv
brew install ruby-build
echo 'export RBENV_ROOT=/usr/local/var/rbenv' >> ~/.bash_profile
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile

然后我使用 rbenv 来安装 ruby​​。首先,找到想要的版本:

rbenv install -l

安装该版本(例如 2.2.2)

rbenv install 2.2.2

然后将全局版本设置为所需的 ruby​​ 版本:

rbenv global 2.2.2

此时您应该会看到为以下命令设置的所需版本:

rbenv versions

ruby --version

现在您应该可以安装捆绑程序了:

gem install bundler

一旦进入所需的项目文件夹,您就可以安装所有必需的 gem:

bundle
bundle install

【讨论】:

  • 所以现在我们有了一个 RVM 和一个 rbenv 答案。现在我们只需要一个chruby ,很多人都是switching 。如需更多信息,请参阅Ruby Rogues episode 比较 ruby​​ 版本管理器。
  • 干得好,谢谢。 rbenv repo 链接如果有人需要它github.com/sstephenson/rbenv
  • 设置echo 'export RBENV_ROOT=/usr/local/var/rbenv' >> ~/.bash_profile而不是只使用默认~/.rbenv的原因是什么?
  • 我在进行 brew 更新时遇到此错误。 错误:/usr/local 必须是可写的!
  • 这是对我有帮助的答案。
【解决方案3】:

似乎是权限问题。这对我有用

sudo chown -R $(whoami) /Library/Ruby/Gems/*

或者在你的情况下

sudo chown -R $(whoami) /usr/local/lib/ruby/gems/2.0.0/gems/

这是做什么的:

这是告诉系统更改文件以将所有权更改为当前用户。安装某些东西时一定有什么东西搞砸了。通常这是因为有多个帐户或用户在不应该总是使用 sudo 进行安装。

【讨论】:

  • 这也是我们的权限问题,在尝试gem update —system 时,我们必须仔细检查 /usr/local/rvm/rubies 目录树并确保正确设置了组权限。
【解决方案4】:

将gems目录设置为运行gem install的用户目录后,使用export GEM_HOME=/home/<user>/gems,问题已解决。

【讨论】:

    【解决方案5】:

    我在Ubuntu 上使用rvm 时遇到了同样的问题,通过在我的终端上将source 设置为短期 解决方案来解决:

    source $HOME/.rvm/scripts/rvm

    source /home/$USER/.rvm/scripts/rvm

    并配置一个默认的 Ruby 版本,在我的例子中是 2.3.3

    rvm use 2.3.3 --default


    长期解决方案是将您的source 添加到您的.bashrc 文件中永久让 Ubuntu 在.rvm 中查找所有 Ruby 文件.

    添加:

    source .rvm/scripts/rvm

    进入

    $HOME/.bashrc 文件。

    【讨论】:

      【解决方案6】:

      我认为问题发生在您使用 rbenv 时。请尝试以下命令来修复它。

      rbenv shell {rb_version}
      rbenv global {rb_version}
      or 
      rbenv local {rb_version}
      

      【讨论】:

        【解决方案7】:

        通过自制软件(即brew update & brew install rbenv)安装 rbenv 或 rvm 作为您的 Ruby 版本管理器(我更喜欢 rbenv),但例如在 rbenv 的情况下,请确保按照 here 和 @987654322 的说明将 rbenv 添加到您的 $PATH @。

        要更深入地了解 rbenv 的工作原理,我推荐 this

        【讨论】:

          猜你喜欢
          • 2011-07-05
          • 2016-12-12
          • 1970-01-01
          • 1970-01-01
          • 2017-02-09
          • 2019-08-20
          • 1970-01-01
          • 2017-11-14
          相关资源
          最近更新 更多