安装gem时为什么会出现"权限被拒绝"错误?

okT*_*alk 48 ruby macos jekyll

我正在尝试安装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
Run Code Online (Sandbox Code Playgroud)

我可以看到Jekyll在我跑的时候安装了gem list所以我很困惑:

*** 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)
Run Code Online (Sandbox Code Playgroud)

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

这是输出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/
Run Code Online (Sandbox Code Playgroud)

这是我的".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
Run Code Online (Sandbox Code Playgroud)

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

the*_*Man 65

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

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

但是,我建议你认真考虑不这样做,而是使用你的RVM将Ruby安装到你自己的主目录中,在那里你可以自动安装Rubies和gem而不会出现权限问题.在" 单用户安装 "中查看安装到本地RVM沙箱的说明.

因为您有RVM ~/.bash_profile,但它没有出现在您的Gem环境列表中,我怀疑您没有按照正确安装RVM的说明,或者您没有使用all-important命令:

rvm use 2.0.0 --default
Run Code Online (Sandbox Code Playgroud)

配置默认的Ruby.

对于大多数用户来说,"单用户安装"是最佳选择.如果您必须使用sudo该配置,那么您做错了什么.


Mik*_*ane 49

我想分享我为我解决这个问题所遵循的步骤,希望它可以帮助其他人(并且如果类似这样的话再次发生,也会提醒我)

我遇到的问题(与OP相同)可能与使用自制软件安装Ruby有关.

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

brew update && brew upgrade
brew doctor
Run Code Online (Sandbox Code Playgroud)

(如果brew医生提出任何问题,请先修复它们.)然后我卸载了ruby

brew uninstall ruby
Run Code Online (Sandbox Code Playgroud)

如果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
Run Code Online (Sandbox Code Playgroud)

然后我用rbenv来安装ruby.首先,找到所需的版本:

rbenv install -l
Run Code Online (Sandbox Code Playgroud)

安装该版本(例如2.2.2)

rbenv install 2.2.2
Run Code Online (Sandbox Code Playgroud)

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

rbenv global 2.2.2
Run Code Online (Sandbox Code Playgroud)

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

rbenv versions
Run Code Online (Sandbox Code Playgroud)

ruby --version
Run Code Online (Sandbox Code Playgroud)

现在你应该能够安装bundler了:

gem install bundler
Run Code Online (Sandbox Code Playgroud)

在所需的项目文件夹中,您可以安装所有必需的宝石:

bundle
bundle install
Run Code Online (Sandbox Code Playgroud)


Bry*_*den 16

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

sudo chown -R $(whoami) /Library/Ruby/Gems/*
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下

sudo chown -R $(whoami) /usr/local/lib/ruby/gems/2.0.0/gems/
Run Code Online (Sandbox Code Playgroud)


030*_*030 6

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


gia*_*pnh 5

我认为当您使用 rbenv 时出现问题。尝试以下命令来修复它。

rbenv shell {rb_version}
rbenv global {rb_version}
or 
rbenv local {rb_version}
Run Code Online (Sandbox Code Playgroud)