Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do I get a "permission denied" error while installing a gem?

Tags:

macos

ruby

jekyll

I'm attempting to install Jekyll. After running gem install jekyll I get this error:

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

I can see that Jekyll is installed when I run gem list so I'm thoroughly confused:

*** 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) 

I've had a lot of problems with my user paths in the past, so I'm wondering if this error could have something to do with that?

Here is the output of 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/ 

Here is my ".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 

Could somebody please help me get Jekyll installed, or at least get past this permissions error?

like image 845
okTalk Avatar asked Jul 09 '13 14:07

okTalk


People also ask

How do I install a new gem?

To install a gem, use gem install [gem] . Browsing installed gems is done with gem list . For more information about the gem command, see below or head to RubyGems' docs. There are other sources of libraries though.

How does gem install work?

What does gem install do? gem install , in its simplest form, does something kind of like this. It grabs the gem and puts its files into a special directory on your system. You can see where gem install will install your gems if you run gem environment (look for the INSTALLATION DIRECTORY: line):

Is gem installed with Ruby?

Ruby installs the dependency rbtree and builds its extension, installs the drip gem, then builds documentation for the installed gems. You can disable documentation generation using the --no-document argument when installing gems.


2 Answers

Your Ruby is installed in /usr/local/Cellar/ruby/....

That is a restricted path and can only be written to when you use elevated privileges, either by running as root or by using sudo. I won't recommend you run things as root since you don't understand how paths and permissions work. You can use sudo gem install jekyll, which will temporarily elevate your permissions, giving your command the rights needed to write to that directory.

However, I'd recommend you give serious thought into NOT doing that, and instead use your RVM to install Ruby into your own home directory, where you'll automatically be able to install Rubies and gems without permission issues. See the directions for installing into a local RVM sandbox in "Single-User installations".

Because you have RVM in your ~/.bash_profile, but it doesn't show up in your Gem environment listing, I suspect you either haven't followed the directions for installing RVM correctly, or you haven't used the all-important command:

rvm use 2.0.0 --default 

to configure a default Ruby.

For most users, the "Single-User installation" is the way to go. If you have to use sudo with that configuration you've done something wrong.

like image 93
the Tin Man Avatar answered Oct 20 '22 14:10

the Tin Man


I wanted to share the steps that I followed that fixed this issue for me in the hopes that it can help someone else (and also as a reminder for me in case something like this happens again)

The issues I'd been having (which were the same as OP's) may have to do with using homebrew to install Ruby.

To fix this, first I updated homebrew:

brew update && brew upgrade brew doctor 

(If brew doctor comes up with any issues, fix them first.) Then I uninstalled ruby

brew uninstall ruby 

If rbenv is NOT installed at this point, then

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 

Then I used rbenv to install ruby. First, find the desired version:

rbenv install -l 

Install that version (e.g. 2.2.2)

rbenv install 2.2.2 

Then set the global version to the desired ruby version:

rbenv global 2.2.2 

At this point you should see the desired version set for the following commands:

rbenv versions 

and

ruby --version 

Now you should be able to install bundler:

gem install bundler 

And once in the desired project folder, you can install all the required gems:

bundle bundle install 
like image 40
Mike Lane Avatar answered Oct 20 '22 14:10

Mike Lane