为什么在安装 gem 时出现“权限拒绝”错误?

我正在尝试安装 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 或者至少帮我解决一下这个权限错误?

151654 次浏览

Ruby 安装在 /usr/local/Cellar/ruby/...中。

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

然而,我建议你认真考虑一下不要这么做,而是用你的 RVM 把 Ruby 安装到你自己的主目录中,在那里你可以自动安装 Ruby 和 gems 而不用担心权限问题。请参阅“ 单用户安装”中安装到本地 RVM 沙箱的说明。

因为您的 ~/.bash_profile中有 RVM,但是它没有出现在 Gem 环境列表中,我怀疑您要么没有正确地遵循安装 RVM 的说明,要么没有使用最重要的命令:

rvm use 2.0.0 --default

配置默认 Ruby。

对于大多数用户来说,“单用户安装”是最好的选择。如果您必须在配置中使用 sudo,那么您就做错了一些事情。

我想和大家分享一下我所采取的步骤,这些步骤帮助我解决了这个问题,希望能够帮助到其他人(同时也是为了提醒自己,以防类似的事情再次发生)

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

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

brew update && brew upgrade
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

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

rbenv global 2.2.2

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

rbenv versions

还有

ruby --version

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

gem install bundler

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

bundle
bundle install

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

安装 rbenv 或 rvm 作为您的 Ruby 版本管理器(我更喜欢 rbenv)通过自制程序(即。brew update & brew install rbenv) ,但是在 rbenv 的例子中,请确保按照指示 给你给你将 rbenv 添加到 $PATH 中。

对于 rbenv 如何工作的更深入的解释,我推荐 这个

我在 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文件。

好像是权限问题,我就是这么做的

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

或者你的情况

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

这是做什么的:

这告诉系统更改文件以将所有权更改为当前用户。一定是有什么东西被安装的时候搞砸了。通常这是因为有多个帐户或用户使用 sudo 进行安装,而他们并不总是必须这样做。

我认为这个问题是在使用 rbenv 时发生的。

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

如果您在 Windows 环境中工作,我建议与管理员一起运行命令提示符。

运行以下命令将权限重置为用户/本地:

sudo chown -R $(whoami):admin /usr/local/* \
&& sudo chmod -R g+rwx /usr/local/*

如果这对你有用,请随时反馈!