错误:执行gem时...(Gem :: FilePermissionError)

时间:2013-09-03 19:21:20

标签: ruby macos gem osx-mountain-lion sudo

我已经检查了所有其他类似的答案,没有一个与我的完全一样,这些解决方案中的任何一个都不适合我。

gem environmentsudo gem environment会得到相同的结果:

RubyGems Environment:
  - RUBYGEMS VERSION: 1.5.3
  - RUBY VERSION: 1.8.7 (2011-12-28 patchlevel 357) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/1.8
     - /home/ava/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

rvm -vrvm 1.22.3

ruby -vruby 1.8.7

OSX 10.8.4

echo $PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/ava/.rvm/bin:/home/ava/bin

gem install <gem-name>给出了

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /usr/local/lib/ruby/gems/1.8 directory.

而我可以通过sudo安装相同的。我做错了什么?

更新:

根据评论和post,我跑了下面的内容:

rvm implode然后重新安装稳定版本。 rvm install 1.9.3或任何其他ruby安装失败,

Error running '__rvm_make -j24',
please read /home/ava/.rvm/log/log/1378418790_ruby-1.9.3-p194/make.log
There has been an error while running make. Halting the installation.

make.log

    [2013-09-05 22:06:48] make
current path: /home/ava/.rvm/src/ruby-1.9.3-p194
command(2): make -j24
        CC = gcc
        LD = ld
        LDSHARED = gcc -shared
        CFLAGS = -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Werror-implicit-function-declaration  -fPIC
        XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
        CPPFLAGS =   -I. -I.ext/include/x86_64-linux -I./include -I.
        DLDFLAGS = -Wl,-soname,libruby.so.1.9
        SOLIBS = -lpthread -lrt -ldl -lcrypt -lm
compiling main.c
compiling dmydln.c
compiling dmyencoding.c
compiling version.c
compiling miniprelude.c
compiling array.c
compiling bignum.c
compiling class.c
compiling compar.c
compiling complex.c
compiling dir.c
compiling dln_find.c
compiling enum.c
compiling enumerator.c
compiling error.c
compiling eval.c
compiling load.c
compiling proc.c
compiling file.c
:
:
:
In file included from ossl.h:213,
                 from ossl_pkcs5.c:5:
openssl_missing.h:71: error: conflicting types for ‘HMAC_CTX_copy’
/usr/local/include/openssl/hmac.h:102: error: previous declaration of ‘HMAC_CTX_copy’ was here
openssl_missing.h:95: error: conflicting types for ‘EVP_CIPHER_CTX_copy’
/usr/local/include/openssl/evp.h:459: error: previous declaration of ‘EVP_CIPHER_CTX_copy’ was here
make[2]: *** [ossl_pkcs5.o] Error 1
In file included from ossl.h:213,
                 from ossl_x509req.c:11:
:
:
:

14 个答案:

答案 0 :(得分:35)

解决错误:

  

错误:执行gem时...(Gem :: FilePermissionError)       您没有对/usr/local/lib/ruby/gems/1.8目录的写入权限。

以下解决方案对我有用:

sudo gem install -n /usr/local/bin cocoapods

答案 1 :(得分:23)

如果您以root用户身份安装了rvm,则必须sudo安装任何内容。

您可以以普通用户身份在用户模式下安装rvm,在这种情况下,所有内容都存储在您的主目录中,并且不需要sudo

如果您未致力于此特定安装,请键入sudo rvm implode并重新开始。

答案 2 :(得分:17)

您的全局(系统范围)配置文件可能设置了--no-user-install标志。创建/编辑本地~/.gemrc文件并附加以下行:

:gemdir:
    - ~/.gem/ruby
install: --user-install

注意
gemdir选项的实际目录会因您的系统/愿望而异;它可能需要也可能不需要,但最好在home文件夹(gemdir)中指定所需的安装目录,而不是假设它将由它自己处理。

ArchLinux Wiki有一些有用/组织良好的信息。


chruby

或者,与已建议的rvm解决方案类似,您可以尝试使用chruby维护,配置和使用ruby的本地版本。但是,要安装ruby的其他版本,您需要使用ruby-install

$ brew install chruby ruby-install
$ ruby-install ruby 2.4.0

$ echo "source /usr/local/opt/chruby/share/chruby/chruby.sh" >> ~/.bash_profile
$ echo "chruby ruby" >> ~/.bash_profile

# Do this to select the default alternative ruby installation, assuming
# there is no other version installed.
$ chruby ruby

## Otherwise, list the available ruby versions installed, and select
$ chruby
ruby-2.3.0
ruby-2.4.0

$ chruby ruby-2.4.0

从项目的自述文件:

  

更改当前的Ruby。特征

Updates $PATH.
    Also adds RubyGems bin/ directories to $PATH.
Correctly sets $GEM_HOME and $GEM_PATH.
    Users: gems are installed into ~/.gem/$ruby/$version.
    Root: gems are installed directly into /path/to/$ruby/$gemdir.
Additionally sets $RUBY_ROOT, $RUBY_ENGINE, $RUBY_VERSION and $GEM_ROOT.
Optionally sets $RUBYOPT if second argument is given.
Calls hash -r to clear the command-lookup hash-table.
Fuzzy matching of Rubies by name.
Defaults to the system Ruby.
Optionally supports auto-switching and the .ruby-version file.
Supports bash and zsh.
Small (~100 LOC).
Has tests.
     

防功能

Does not hook cd.
Does not install executable shims.
Does not require Rubies be installed into your home directory.
Does not automatically switch Rubies by default.
Does not require write-access to the Ruby directory in order to install gems.
     

要求

bash >= 3 or zsh

答案 3 :(得分:14)

  

错误:执行gem时...(Gem :: FilePermissionError)       您对/Library/Ruby/Gems/2.3.0目录没有写权限。

首先安装RVM,然后在.zshrc或.bashrc或其他位置设置用户gem文件夹:

export GEM_HOME="$HOME/.gem"

现在gem i LIB将宝石放置在安全的位置。

答案 4 :(得分:3)

假设已安装rvm,您可以执行以下操作:

$ rvm install 2.1.1
$ rvm @global do gem install compass

无需做sudo。

答案 5 :(得分:1)

如果您已安装rbenv并遇到此错误,下面的答案将有所帮助(这对我来说是有效的)

问题:

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

请勿使用SUDO

  1. 检查rbenv版本
$ rbenv versions
* system (set by /Users/user/.rbenv/version)
  2.3.8

在这里,您可以看到默认情况下已选择系统。将其更改为您的红宝石版本。

$ rbenv global 2.3.8
$ rbenv versions
  system
* 2.3.8 (set by /Users/user/.rbenv/version)

然后尝试安装捆绑器,它将起作用:

$gem install bundler -v 1.17.3
Fetching: bundler-1.17.3.gem (100%)
Successfully installed bundler-1.17.3
Parsing documentation for bundler-1.17.3
Installing ri documentation for bundler-1.17.3
Done installing documentation for bundler after 5 seconds
1 gem installed

答案 6 :(得分:0)

您可能没有沿该路径某处的写入权限(很可能是/ usr / local / lib),您需要更改RVM存储的位置以便不需要sudo

答案 7 :(得分:0)

请注意,如果您选择执行rvm的多用户安装,则必须通过

将每个用户添加到rvm组
usermod -a -G rvm <USERNAME>

来自rvm的FAQ

的相关信息

答案 8 :(得分:0)

昨天我尝试使用以下命令安装Rails时遇到了相同的错误。

$ gem install rails -v 4.2.3

在此之前,我已经安装了Ruby Environment Manager(rbenv),但是以下命令未能将if-eval添加到bash配置文件中。

$ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> -/.bash_profile

因此,我调查了一下,发现当前目录引用-是上述命令失败的问题。我将其更改为〜并成功运行了以下命令

$ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile

此后,我能够成功安装rails gem(无需执行sudo)

答案 9 :(得分:0)

在尝试安装watchr软件包时,我在Mac上遇到了类似的问题

错误:执行gem时...(Gem :: FilePermissionError)

每次我需要安装软件包时都以某种方式运行sudo感觉过度。我已经安装了rbenv,所以我设置了像这样的全球红宝石版本

rbenv global 2.6.5

然后简单地安装了我想要的软件包。就我而言,命令是

gem install watchr

答案 10 :(得分:0)

此权限错误非常常见,但可悲的是,大多数答案都提供了错误的建议,并且不完整且已过时。为了解决这个问题,我写了一个非常详细的指南,介绍了如何在2020年在macOS上安装Ruby gem:https://www.moncefbelyamani.com/the-definitive-guide-to-installing-ruby-gems-on-a-mac/。 它说明了为什么会出现权限错误,比较了各种解决方案,为什么有些解决方案比其他解决方案好,以及为什么不应该使用->with('recommendedPricing:id,base_price,discount_method') ->with('recommendedPricing.bands:id,percent_change,fixed_price')

TL; DR:使用经过实践检验且可靠的自动化脚本,它将为您完成所有设置:https://github.com/monfresh/laptop

答案 11 :(得分:0)

在尝试了上述所有不同的解决方案之后,没有一个对我有用。因此,对于那些将来会遇到它的人,请知道这一点。 该解决方案与可可豆荚无关,而与Xcode新版本有关。在更新新版本时,您需要同意新的条款和条件。您可以直接在终端中进行操作。 跑 : sudo xcode-select -s /Applications/Xcode.app/Contents/Developer 然后: 须藤xcodebuild -license 而不是按空格,直到您到达按钮,最后键入同意 从可以再尝试简单地添加cocoapods: 宝石安装cocoapods

答案 12 :(得分:0)

如果您刚刚安装了 rvm,并且遇到了这样的错误

<块引用>

错误:执行 gem 时 ... (Gem::FilePermissionError) 您没有 /Library/Ruby/Gems/2.6.0 目录的写入权限。

记得打电话

source ~/.bash_profile

确保gems安装在~/.rvm

然后你可以简单地

rvm use 2.6.6
gem install yourgem:2.0.1

答案 13 :(得分:0)

如果您使用 rbenv,您可能忘记使用以下内容启用它:

> rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init -)"