293

below is what I need to do.

To run the specs, you'll need to install RSpec. First, run gem install bundler in the root directory of your project. Then, run bundle install. To run a single spec file, run a command like this: bundle exec rspec spec/00_hello_spec.rb. To run all of the specs at once, run bundle exec rspec.

So, I typed gem install bundler in Terminal, and got the error:

You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

and this was in the project file in atom

source "https://rubygems.org"
gem "rspec", "~> 3.2.0"

My question is:

It seems like terminal is giving me the response because I'm not supposed to change anything on ruby, and I need to bundle install inside of atom? Could anyone tell me how to use atom or run anything in atom?

pkamb
  • 30,595
  • 22
  • 143
  • 179
user9426236
  • 2,931
  • 2
  • 7
  • 3

26 Answers26

498

Update:

You are correct that macOS won't let you change anything with the Ruby version that comes installed with your Mac. However, it's possible to install gems like bundler using a separate version of Ruby that doesn't interfere with the one provided by Apple.

Using sudo to install gems, or changing permissions of system files and directories is strongly discouraged, even if you know what you are doing. Can we please stop providing this bad advice? I wrote a detailed article that shows why you should never use sudo to install gems.

The solution involves two main steps:

  1. Install a separate version of Ruby that does not interfere with the one that came with your Mac.
  2. Update your PATH such that the location of the new Ruby version is first in the PATH. Some tools do this automatically for you. If you're not familiar with the PATH and how it works, it's one of the basics that you should learn, and you'll understand why you sometimes get "command not found" errors and how to fix them.

There are several ways to install Ruby on a Mac. The best way that I recommend, and that I wish was more prevalent in the various installation instructions out there, is to use an automated script like Ruby on Mac that will set up a proper Ruby environment for you.

The main reason is that it saves each person a ton of time. Time is our most limited and valuable resource. Why make people do things manually when they can be automated with a perfect result every time?

Another reason is that it drastically reduces the chance of human error, or errors due to incomplete instructions.

If you want to do things manually, keep on reading. First, you will want to install Homebrew, which installs the prerequisite command line tools, and makes it easy to install other necessary tools.

Then, the two easiest ways to install a separate version of Ruby are:

If you would like the flexibility of easily switching between many Ruby versions [RECOMMENDED]

Choose one of these four options:

  • chruby and ruby-install - my personal recommendations and the ones that are automatically installed by the Ruby on Mac script. These can be installed with Homebrew:
brew install chruby ruby-install

If you chose chruby and ruby-install, you can then install the latest Ruby like this:

ruby-install ruby

Once you've installed everything and configured your .zshrc or .bash_profile according to the instructions from the tools above, quit and restart Terminal, then switch to the version of Ruby that you want. In the case of chruby, it would be something like this:

chruby 3.1.0

Whether you need to configure .zshrc or .bash_profile depends on which shell you're using.

If you know for sure you don't need more than one version of Ruby at the same time (besides the one that came with macOS) [NOT RECOMMENDED]

Even if you think you won't need another version now, you will eventually and you won't be able to easily switch. This will cause confusion and headaches, which is why I don't recommend installing and managing Ruby with Homebrew.

If you choose to use Homebrew to install Ruby despite my warnings, you'll be on your own if you run into any issues.

  • Install ruby with Homebrew:
brew install ruby

Then update your PATH by running this command:

echo 'export PATH="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/2.7.0/bin:$PATH"' >> ~/.zshrc

The 2.7.0 in the command above assumes Homebrew installed a Ruby version that starts with 2.7. If you're using a different version (which you can check with ruby -v), replace 2.7 with the first two digits of your Ruby version.

Then "refresh" your shell for these changes to take effect:

source ~/.zshrc

Or you can open a new terminal tab, or quit and restart Terminal.

Replace .zshrc with .bash_profile if you are using Bash. If you're not sure, read my guide to find out which shell you're using.

To check that you're now using the non-system version of Ruby, you can run the following commands:

which ruby

It should be something other than /usr/bin/ruby

ruby -v

It should be something other than 2.6.3 if you're on macOS Catalina, or 2.6.8 on Monterey. As of early 2022, 3.1.0 is the latest Ruby version.

Once you have this new version of Ruby installed, you can now install bundler (or any other gem):

gem install bundler
monfresh
  • 6,894
  • 1
  • 22
  • 20
  • 12
    if you're like me and you use zsh (or another shell other than bash), there is an extra step! After installing `rbenv` you have to do `echo 'eval "$(rbenv init -)"' >> ~/.bash_profile`. [Source](https://gist.github.com/stonehippo/cc0f3098516fb52390f1) – Marlo Mar 22 '19 at 17:27
  • 2
    If you face a permission error on /usr/local directory, run `sudo chown -R $(whoami) $(brew --prefix)/*`. See this [thread](https://stackoverflow.com/questions/49282002/error-of-error-could-not-lock-config-file-git-config-permission-denied-occu) for more info – Anas Tiour May 20 '19 at 01:34
  • 8
    Since MacOS is encouraging people to switch to zsh, you should also apply the change to ~/.bash_profile to ~/.zshrc. – Adam_G Dec 30 '19 at 01:14
  • I installed ruby with rbenv, and `which ruby` does return `/usr/bin/ruby`. Should I find where the new (rbenv installation) of ruby is located and update the PATH so that location appears before the Mac installation? – stevec Jun 08 '20 at 09:07
  • 7
    Link is blocked and you need to subscribe to a newsletter (wow). – Fluous Dec 22 '20 at 14:07
  • 1
    Except of course... "you don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory. – Sean Munson Mar 12 '21 at 17:21
  • Hi @SeanMunson. If your comment was in response to running my script, have you tried quitting and restarting your terminal? If something is not working, please let me know and I will be glad to help you. Sometimes people mess up their environment from trying various things before finding me, and I always get them back up and running. – monfresh Mar 12 '21 at 18:09
  • 3
    As of today, the install-ruby-on-macos repo is empty and the script is locked behind a paywall. Gross. – TJ Murphy Feb 20 '22 at 20:39
  • @monfresh I followed your steps.. following is the output: $ which ruby /usr/local/opt/ruby/bin/ruby $ ruby -v ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-darwin21] HOWEVER, when I try to install cocoapods using: $ gem install cocoapods I get: ERROR: While executing gem ... (Errno::EACCES) Permission denied @ dir_s_mkdir - /Users/omkarbojjawar/.local/share/gem/specs Please help. – Omkar Bojjawar Mar 23 '22 at 11:34
  • If you are on Monterey on a M1 Mac the echo command should look like this: `echo 'export PATH="/opt/homebrew/Cellar/ruby/3.1.1/bin:$PATH"' >> ~/.zshrc ` – Νίκος Τιτομιχελάκης Mar 29 '22 at 10:33
  • For me ruby-v gives the version of the macOS ruby. Is there a way i can check which version of ruby is installed by homebrew? – vikram sah May 19 '22 at 14:44
  • @OmkarBojjawar Sorry, I just saw your message. As I mentioned here and in the guide on my website, I don't recommend installing Ruby with Homebrew. Please read my guide for installing Ruby with chruby. – monfresh May 26 '22 at 18:01
  • @vikramsah, if `ruby -v` shows the macOS Ruby, that means your PATH is not set properly, or you need to quit and restart your Terminal. In general, I don't recommend installing Ruby with Homebrew. Please read my guide that I linked at the top and follow the instructions for installing Ruby with chruby. – monfresh May 26 '22 at 18:11
179

Worked for me using the parameter --user-install running following command:

gem install name_of_gem --user-install

Edit

There was one gem I still could not install (it required the Ruby.h headers of the Ruby development kit or something), then I tried the different version managers, but somehow that still did not really work as it was stated in the documentations how to just install and switch (it did just not switch the versions). Then I removed all the installed version managers and installed afterwards with brew install ruby the latest version and did set the PATH variable, too. (It will be mentioned after the installation of ruby from brew), which worked.

Stefan Rein
  • 6,497
  • 3
  • 37
  • 34
127

If you don't want to run sudo then install ruby using homebrew

brew install ruby
export GEM_HOME="$HOME/.gem"
gem install rails

You may want to add export GEM_HOME="$HOME/.gem" to your ~/.bash_profile or .zshrc if you're using zsh

Note: RubyGems keeps old versions of gems, so feel free to do some cleaning after updating:

gem cleanup
Paresh Mangukiya
  • 37,512
  • 17
  • 201
  • 182
STIKO
  • 1,627
  • 1
  • 9
  • 9
  • 7
    didnt help on Catalina OS – Efrat Levitan Oct 14 '19 at 18:08
  • `Rails is not currently installed on this system. To get the latest version, simply type: $ sudo gem install rails You can then rerun your "rails" command` – Efrat Levitan Oct 16 '19 at 09:14
  • It sounds like you are trying run a `rails` command. The last two commands I have do not run `rails` command. Try to open a new terminal outside of your project then copy last two lines of my answer one by one. – STIKO Oct 16 '19 at 21:58
  • don't forget to `source ~/. zshrc` (or `~/.bash_profile`) – gordinmitya May 17 '20 at 08:56
  • 1
    Working for me on Catilina 10.15.4, I did remove rvm rbenv and then installed rbenv. Then updated my .zshrc , sourced it(aka $ ```source ~/.zshrc```) and then rails installed flawlessly. Thanks for the PATH correction. – Curtis M May 22 '20 at 00:00
  • This worked for me - I use Catalina as well. I didn't want the messiness of using sudo, so thanks! – mogwai Nov 12 '20 at 03:32
  • It works on macOS Catalina 10.15.7 Thank you! – vidalbenjoe Dec 03 '20 at 12:00
59

Just export GEM_HOME:

export GEM_HOME="$HOME/.gem"

And then try:

gem install cocoapods
Muhammad Naeem Paracha
  • 1,805
  • 1
  • 15
  • 23
34

As @idleberg mentions, on Mac OS, it is best to install rbenv to avoid permissions errors when using manually installed ruby.

Installation

$ brew update
$ brew install rbenv

Add the following in .bashrc file:

eval "$(rbenv init -)"

Now, we can look at the list of ruby versions available for install

$ rbenv install -l

Install version 2.3.8 for example

$ rbenv install 2.3.8

Now we can use this ruby version globally

$ rbenv global 2.3.8

Finally run

$ rbenv rehash
$ which ruby
/Users/myuser/.rbenv/shims/ruby
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-darwin17]

Go for it

Now install bundler

$ gem install bundler

All done!

Mick
  • 28,666
  • 13
  • 107
  • 130
11

I have faced same issue after install macOS Catalina. I had try below command and its working.

sudo gem update
Arjun Patel
  • 1,208
  • 11
  • 22
  • By far the simplest solution for anyone who doesn't want to do a full-blown installation of ruby + package managers + etc etc. – dss May 03 '21 at 05:14
  • 1
    You should never ever use `sudo` to install any kind of development dependencies you don't have control over. – Andre Ravazzi Feb 01 '22 at 00:51
8

It's generally recommended to use a version manager like rbenv or rvm. Otherwise, installed Gems will be available as root for other users.

If you know what you're doing, you can use sudo gem install.

idleberg
  • 11,699
  • 7
  • 41
  • 60
7

Run this

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

eval "$(rbenv init -)"

Follow instructions, (in my case add to ~/.zshrc) ;)


Also important: Changes only take effect if you reboot your console. Two options

  • Enter source <modified file>
  • close and open again
tomasbarrios
  • 733
  • 7
  • 14
  • I upgraded to Catalina (which switches from bash to zsh) and I forgot to copy everything from `.bash_profile` over to `.zshrc` – wetjosh Jan 12 '20 at 21:06
  • This works! Don't use `sudo`! In case you don't use ZSH, you can add this to your `.profile` or `.bash_profile`. A great way to check if this works is to use `which ruby`, it should point to a path which has `rbenv` and not to `/usr/local/ruby`. – Swaathi Kakarla Dec 21 '20 at 07:23
6

Try this:

sudo gem install cocoapods --user-install

Worked for me

Sargis
  • 1,072
  • 1
  • 17
  • 29
4

If you have installed ruby separately and installed ruby using rbenv/rvm you budler might point to different versions.

try

gem env home

and

ruby -v

both should point to same version.check you have installed ruby using rbenv/rvm, If so delete the ruby version you installed separately.

In order for gem to work, you must invoke rbenv,

rbenv shell <ruby version> 

and

rbenv global <ruby version>

I am not sure how RVM works. Let me know if this works.

4

Try 1 or 2

1 - $ gem install cocoapods
2 - $ sudo gem install cocoapods

if it doesn't work, then export GEM_HOME:

export GEM_HOME="$HOME/.gem"

And try again:

gem install cocoapods

Remember the oficial doc says you can use sudo (https://guides.cocoapods.org/using/getting-started.html#getting-started).

Mateus Melo
  • 716
  • 7
  • 11
3

To fix this, I ran

brew reinstall ruby

which showed me this message

==> Caveats
==> ruby
By default, binaries installed by gem will be placed into:
  /opt/homebrew/lib/ruby/gems/3.1.0/bin

You may want to add this to your PATH.

ruby is keg-only, which means it was not symlinked into /opt/homebrew,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ruby first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.profile

So I added these two lines to my ~/.bashrc file

export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
export PATH="/opt/homebrew/lib/ruby/gems/3.1.0/bin:$PATH"

Then I opened a new Terminal.app window and ran my gem install command again and it worked.

Boris Verkhovskiy
  • 10,733
  • 7
  • 77
  • 79
2

rbenv global 2.6.3 helped me solve this problem.

Prerit Jain
  • 200
  • 1
  • 5
1

A different installation of ruby should be used. I use rbenv for that purpose.

# install your version of ruby
$ rbenv install 2.0.0-p247

# modify .ruby_version on current directory
$ rbenv local 2.0.0-p247

# proceed installing gems
$ gem install bundler

Disclamer: I am not a ruby person. This worked for me and if you are a ruby expert and see things to change in this answer, please, go ahead or comment!

aerijman
  • 2,159
  • 1
  • 19
  • 26
1

TL;DR

In several occasions, I've solved this kind of errors by just closing my terminal session and opening a new one before retrying the failing command.

Long explanation

In some SOs (such as MacOS) there is already a pre-installed, system-wide version of ruby. If you are using a version manager, such as rbenv or asdf, they work by playing with the environment of your current session so that the relevant commands point to the binaries installed by the version manager.

When installing a new binary, the version manager installs it in a special location, usually somewhere under the user's home directory. It then configures everything in your PATH so that you get the freshly installed binaries when you issue a command, instead of the ones that came with your system. However, if you don't restart the session (there are other ways of getting your environment updated, but that's the easiest one) you don't get the new configuration and you will be using the original installation.

volmedo
  • 26
  • 4
1

I was using the below command to install fastlane but didn't worked

gem install fastlane -NV

So using sudo to install gems worked for me and it would be like

sudo gem install fastlane -NV

1

I try it, and work to me export PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH export LDFLAGS="-L/opt/homebrew/opt/ruby/lib" export CPPFLAGS="-I/opt/homebrew/opt/ruby/include" gem install ffi

1

Had the same error because I forgot to run the following after installing ruby:

source ~/.zshrc - or other ~/...rc file depending on your terminal

Boštjan Pišler
  • 713
  • 10
  • 17
0

Solution for Mac

  1. Install/update RVM with last ruby version

    \curl -sSL https://get.rvm.io | bash -s stable

  2. Install bundler

    gem install bundler


after this two commands (sudo) gem install .... started to work

johndpope
  • 4,597
  • 2
  • 38
  • 39
Vasily Bodnarchuk
  • 22,304
  • 9
  • 118
  • 120
0

Solution for MAC. run the command

sudo gem update    

then type your Mac password when prompted

Martin Brisiak
  • 3,473
  • 12
  • 35
  • 49
0

After trying the previous approaches, this worked for me on Big Sur:

sudo gem install -n /usr/local/bin cocoapods
Justin Shenk
  • 510
  • 1
  • 4
  • 16
0
  1. Install homebrew by passing this into your terminal

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  2. Install cocoapods using brew

    brew install cocoapods

thanhbinh84
  • 16,490
  • 4
  • 52
  • 67
-1

This worked for me on Mac

sudo chown -R $(whoami) $(brew --prefix)/*

Thubz
  • 1
  • 1
  • 1
-1

I'm using Mojave with rbenv, this solution works for me:

$ vi ~/.bash_profile

Add this line into the file:

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
Maya Nastasya
  • 197
  • 2
  • 15
-1

You need to install rbenv and maintain ruby versions under rbenv.

  1. brew install rbenv
  2. rbenv init
  3. append eval "$(rbenv init -)" to ~/.bash_profile
  4. rbenv install {stable_version_#} you can get version number using rbenv install -L
  5. rbenv global {your_preferred_version_#} command use to switch to ruby versions
  6. rbenv shell {your_preferred_version_#}
  7. gem install {whatever you want gems}

More detail https://github.com/rbenv/rbenv

Sachintha Udara
  • 564
  • 6
  • 20
-2

Simply doing sudo gem uninstall cocoapods worked for me.

Harsh Phoujdar
  • 528
  • 8
  • 21