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

RubyMacosGemOsx Mountain-LionSudo

Ruby Problem Overview


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

Ruby Solutions


Solution 1 - Ruby

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

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

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

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

If you have installed rbenv & facing this error, below answer will help (this is how it worked for me)

Issue:

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

DO NOT USE SUDO

  1. check the rbenv versions
$ rbenv versions
* system (set by /Users/user/.rbenv/version)
  2.3.8

Here, you can see, by default it selected system. change it to your ruby version.

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

Then try installing the bundler, it will work:

$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

Solution 6 - Ruby

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

Solution 7 - Ruby

assuming that rvm is installed you could do something like:

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

No need to do sudo.

Solution 8 - Ruby

Be aware that if you chose to perform a multi-user install of rvm, you must add each user to the rvm group via

usermod -a -G rvm <USERNAME>

Relevant info from rvm's FAQ

Solution 9 - Ruby

I encountered the same error yesterday when I tried to install rails using following command.

$ gem install rails -v 4.2.3

Prior to this I had installed Ruby Environment Manager (rbenv), but the following command failed to add the if-eval to bash profile.

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

So, I looked into this and found out that the current directory reference - was the problem for the above command to fail. I changed it to ~ and successfully ran the below command

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

After this I was able to install the rails gem successfully (without needing to do sudo)

Solution 10 - Ruby

I run into a similar problem on my Mac while trying to install watchr package

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

Somehow running sudo every time I need to install a package felt excessive. I have rbenv installed so I set global ruby version like this

rbenv global 2.6.5

Then simply installed the package I wanted. In my case the command is

gem install watchr

Solution 11 - Ruby

ok after trying all the different solutions above, none of them worked for me. So for those who will encounter it in the future please know this. the solution could have nothing to do with cocoa pods but more with Xcode new versions. as you update the new version you need to agreed with the new terms and conditions. you can do so directly in the terminal. Run : sudo xcode-select -s /Applications/Xcode.app/Contents/Developer and than: sudo xcodebuild -license than press space till you arrive at the button and finally type agree From than can try again to add cocoapods with simply : gem install cocoapods

Solution 12 - Ruby

If you have just installed rvm, and you are getting error like this

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

remember to call

source ~/.bash_profile

to make sure that gems are installed in ~/.rvm

Then you can simply

rvm use 2.6.6
gem install yourgem:2.0.1

Solution 13 - Ruby

If you use rbenv, it's possible that you forgot to enable it with something like:

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

eval "$(rbenv init -)"

Solution 14 - Ruby

I tried to update my ruby to the newest version use brew ruby install

and after I got my latest ruby version , gem install rails will work

Solution 15 - Ruby

It depends on the context. For example if you are running this from a Jenkins perspective things dont work the same way as when firing up a bash shell and giving gem or bundle instructions. I got the same error when Jenkins but failed to realize that Jenkins has his own way of figuring out the PATH so things may not work well there unless you find the proper jenkins config field to fill in related information for .. wherere is ruby for example. Otherwise you may end up issuing symbolic link commands to link where the machine understands the executables..

Solution 16 - Ruby

You probably don't have write permissions to somewhere along that path, (most likely /usr/local/lib), you need to change the location of your RVM storage in order to not need sudo

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAvaView Question on Stackoverflow
Solution 1 - RubydimpiaxView Answer on Stackoverflow
Solution 2 - RubyAmandeep SinghView Answer on Stackoverflow
Solution 3 - RubyILMostro_7View Answer on Stackoverflow
Solution 4 - RubytadmanView Answer on Stackoverflow
Solution 5 - RubyspgokulView Answer on Stackoverflow
Solution 6 - RubymonfreshView Answer on Stackoverflow
Solution 7 - RubyAllanView Answer on Stackoverflow
Solution 8 - Rubythe_ogreView Answer on Stackoverflow
Solution 9 - RubyRaamView Answer on Stackoverflow
Solution 10 - RubyDmitryView Answer on Stackoverflow
Solution 11 - RubyDamsobabaView Answer on Stackoverflow
Solution 12 - RubyTedView Answer on Stackoverflow
Solution 13 - Rubypiton4egView Answer on Stackoverflow
Solution 14 - RubyFransiskus AldoView Answer on Stackoverflow
Solution 15 - Rubyuser3172824View Answer on Stackoverflow
Solution 16 - Rubydannymc129View Answer on Stackoverflow