ERROR: While executing gem ... (Gem::FilePermissionError)

110,836

Solution 1

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

  1. Install RVM
  2. Set the gem folder in your shell resource file. I.e. .zshrc, .bashrc etc
export GEM_HOME="$HOME/.gem"
  1. Install you gem gem i LIBRARY_NAME

Solution 2

To resolve the error:

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

the following solution worked for me:

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

Solution 3

Your global (system-wide) config file probably has the --no-user-install flag set. Create/edit your local ~/.gemrc file and append the following line(s):

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

Note
The actual directory for the gemdir option will vary depending on your system/desire; it may or may not be needed, but it's probably better to designate the desired installation directory within your home folder (gemdir) than to assume it'll be taken care of by itself.

The ArchLinux Wiki has some useful/well-organized information pertaining to this.


chruby

Alternatively, similar to the rvm solution already suggested, you can try using chruby to maintain, configure, and use local versions of ruby. To install additional versions of ruby, however, you need to use 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

From the project's README:

Changes the current Ruby. Features

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.

Anti-Features

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.

Requirements

bash >= 3 or zsh

Solution 4

If you have installed rvm as the root user, then you must sudo to install anything.

You can install rvm in user-mode as a regular user, in which case everything is stored in your home directory and no sudo is required.

If you are not committed to this particular install, type sudo rvm implode and start over.

Solution 5

The "write permissions" errors and Gem::FilePermissionError mentioned here are due to an improperly configured Ruby environment. You should never need to use sudo to install gems, no matter how many times you see it as an accepted answer on Stack Overflow. Here's why.

At a high level, setting up a proper Ruby development environment on a Mac involves six steps:

  1. Install Homebrew (which also installs the prerequisite Apple command line tools)
  2. Install a Ruby manager (such as chruby, rbenv, asdf, RVM) - most of these can be installed with Homebrew
  3. Configure the Ruby manager by adding the appropriate lines to your shell file (~/.bash_profile or ~/.zshrc) - each manager will have instructions for doing this, and this is a typical step that people miss
  4. Restart the terminal (or open a new tab) for the shell changes to take effect - another step that is often overlooked
  5. Install a specific version of Ruby using the Ruby manager
  6. Switch to that version of Ruby using the Ruby manager

My personal preference is chruby with ruby-install. For more details and a script that can automate this whole process, check out my answer here: https://stackoverflow.com/a/54873916/928191

Share:
110,836
Ava
Author by

Ava

Beginner!

Updated on July 08, 2022

Comments

  • Ava
    Ava almost 2 years

    I have checked all the other similar answers and none was exactly like mine, neither did any of those solutions work for me.

    gem environment and sudo gem environment give the same result:

    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 -v : rvm 1.22.3

    ruby -v : ruby 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> gives

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

    whereas I am able to install the same via sudo. What am I doing wrong?

    UPDATE:

    As per comments and this post, I ran following:

    rvm implode and then re installed the stable version. rvm install 1.9.3 or any other ruby installation fails with

    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:
    :
    :
    :