红宝石-为什么在安装gem时出现“权限被拒绝”错误?

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

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

我可以看到在运行gem env时已安装了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,或者至少可以解决此权限错误吗?

okTalk asked 2020-06-27T09:34:06Z
7个解决方案
65 votes

您的Ruby已安装在sudo中。

这是一个受限制的路径,仅当您以root用户身份运行或使用sudo使用提升的特权时,才可以写入该路径。我不建议您以root用户身份运行,因为您不了解路径和权限的工作方式。 您可以使用sudo gem install jekyll,它会暂时提升您的权限,为您的命令提供写入该目录所需的权限。

但是,我建议您认真考虑不要这样做,而应使用RVM将Ruby安装到您自己的主目录中,在该目录中,您将能够自动安装Rubies和gems而没有权限问题。 请参阅“单用户安装”中的安装到本地RVM沙箱的说明。

因为您的sudo中有RVM,但是它没有出现在您的Gem环境列表中,我怀疑您未遵循正确安装RVM的指示,或者您没有使用过所有重要的命令:

rvm use 2.0.0 --default

配置默认的Ruby。

对于大多数用户而言,“单用户安装”是必经之路。 如果必须在该配置下使用sudo,那么您做错了什么。

the Tin Man answered 2020-06-27T09:34:44Z
47 votes

我想分享为我解决此问题所遵循的步骤,希望它可以对其他人有所帮助(同时也提醒我,以防再次发生这种情况)

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

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

brew update && brew upgrade
brew doctor

(如果Brew医生提出任何问题,请先解决它们。)然后我卸载了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

然后将全局版本设置为所需的红宝石版本:

rbenv global 2.2.2

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

rbenv versions

ruby --version

现在您应该能够安装捆绑程序:

gem install bundler

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

bundle
bundle install
Mike Lane answered 2020-06-27T09:35:53Z
15 votes

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

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

还是你的情况

sudo chown -R $(whoami) /usr/local/lib/ruby/gems/2.0.0/gems/
Bryan Norden answered 2020-06-27T09:36:18Z
6 votes

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

030 answered 2020-06-27T09:36:39Z
3 votes

我在.bashrc上使用$HOME/.bashrc时遇到了相同的问题,这是通过将我的终端机上设置.rvm作为短期解决方案来解决的:

$HOME/.bashrc

要么

$HOME/.bashrc

并在我的情况下配置默认的Ruby版本$HOME/.bashrc

$HOME/.bashrc


长期的解决方案是将$HOME/.bashrc添加到.bashrc文件中,以使Ubuntu在.rvm中永久显示所有Ruby文件。

加:

$HOME/.bashrc

进入

$HOME/.bashrc文件。

David Ben Dahan answered 2020-06-27T09:37:42Z
0 votes

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

有关rbenv如何工作的更深入的解释,我建议您这样做。

urubuz answered 2020-06-27T09:38:08Z
0 votes

我认为使用rbenv时发生了问题。 请尝试以下命令对其进行修复。

rbenv shell {rb_version}
rbenv global {rb_version}
or 
rbenv local {rb_version}
giapnh answered 2020-06-27T09:38:29Z
translate from https://stackoverflow.com:/questions/17550903/why-do-i-get-a-permission-denied-error-while-installing-a-gem