511

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?

6
  • 48
    Simply use following command sudo chown -R $USER /Library/Ruby/Gems/ Commented Apr 4, 2021 at 12:14
  • Set global ruby version like this rbenv global 3.1.2 then it will work. Commented Jun 23, 2022 at 2:59
  • @FaizFareed I tried this and am still getting the same error. Any ideas? Commented Dec 5, 2023 at 21:12
  • @jarrodwhitley you should update your system OS accordingly Commented Dec 8, 2023 at 10:40
  • 3
    None of these worked for me but github.com/rbenv/rbenv/issues/1267#issuecomment-730126503 did Commented Jan 16, 2024 at 18:55

41 Answers 41

573
+200

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?

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.

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:

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.3 

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/3.1.0/bin:$PATH"' >> ~/.zshrc 

The 3.1.0 in the command above assumes Homebrew installed a Ruby version that starts with 3.1. If it installed a different version, replace 3.1 with the first two digits of your Ruby version.

If you're on an M1/M2 Mac, replace /usr/local with /opt/homebrew

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 not be /usr/bin/ruby

ruby -v 

It should be 3.1.3 or later.

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

gem install bundler 
Sign up to request clarification or add additional context in comments.

12 Comments

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
If you face a permission error on /usr/local directory, run sudo chown -R $(whoami) $(brew --prefix)/*. See this thread for more info
Since MacOS is encouraging people to switch to zsh, you should also apply the change to ~/.bash_profile to ~/.zshrc.
Except of course... "you don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
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
|
338

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

gem install name_of_gem --user-install 

Install in user's home directory instead of GEM_HOME

https://guides.rubygems.org/command-reference/#gem-install

RubyGems’ default local repository can be overridden with the GEM_PATH and GEM_HOME environment variables. GEM_HOME sets the default repository to install into. GEM_PATH allows multiple local repositories to be searched for gems.

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.

3 Comments

This worked well for me; I just needed to also add the bin path (~/.gem/ruby/2.6.0/bin in my case) to my $PATH. Didn't need to install an extra Ruby or pay for the current top answer's installation script.
thanks. that resolved my issue on a locked down corporate Mac where I couldn't simply do sudo chown :)
this one worked for me...thank u!...Apple s4cks
171

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 

7 Comments

didnt help on Catalina OS 😐
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
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.
don't forget to source ~/. zshrc (or ~/.bash_profile)
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.
|
131

Just export GEM_HOME:

export GEM_HOME="$HOME/.gem" 

And then try:

gem install cocoapods 

11 Comments

As someone who used RVM to install Ruby and Rails on OSX, this worked well for me and is much simpler than the other posted solutions.
ERROR: While executing gem ... (Errno::EACCES) Permission denied @ dir_s_mkdir - /Users/kanchan/.local/share/gem/specs
give permission to the specified directory.
sudo chown -R /Users/kanchan/.local/share/gem/*
@MuhammadNaeemParacha it didn't work.. here's my code: sudo chown -R /Users/myName/.local/share/gem/* Password: usage: chown [-fhnvx] [-R [-H | -L | -P]] owner[:group] file ... chown [-fhnvx] [-R [-H | -L | -P]] :group file ... Please help.
|
105

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!

1 Comment

This should be the accepted answer.
31

Try this:

sudo gem install cocoapods --user-install 

Worked for me

4 Comments

This is the only method that's worked for me. Tried installing rbenv and used multiple Ruby versions without any progress.
Warning: This can cause problems in the future.
works for me dear.
That's the only thing that worked for me (but after I tried missing up with some other things that may have made an effect leading for this answer to work)
15

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.

Comments

14

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

In my case, the issue was related to ruby access some how the ruby path was messed up in my system.

The below steps helped me resolve the problem

  1. Open the terminal

  2. Install ruby using homebrew

[for fresh install] brew install ruby

[for reinstalling] brew reinstall ruby

  1. Check the path of ruby using the below command

    which ruby

  2. It should be installed in the below path

    /usr/bin/ruby

  3. To change the ruby path to the user path

To check which shell is used by your system

echo $0 -zsh 

For zshrc

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

For bash

echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >>~/~/.bashrc

  1. Quit and relaunch the terminal

  2. After changing the path with step 5

  3. Check for the path of the ruby again (execute step 3 - please make sure the path displays as given below)

/usr/local/opt/ruby/bin/ruby

[if you don't quit and launch the terminal, step 4 path will be shown]

  1. This step may not be applicable to everyone can skip step 10 & 11, if you have the correct Cocoapods version installed

Check the version of the pod installed

pod --version

  1. Uninstall the specific version of Cocoapods using the below command

In case the version installed is 1.11.0

gem uninstall cocoapods -v 1.11.0

  1. Install the Cocoapods of the specific version

    gem install cocoapods -v 1.11.0

  2. Change the path to the Project directory cd {path of the project directory}

  3. Install the bundler in the project directory

bundle install

  1. Execute pod install

pod install

3 Comments

In M1 chip - I got the issue. After step 5 path was not changed a nd again it is showing the step 4 always. What can I do? I have reopened he terminal after quit. but no use. Any specific cmd we use to change the path.
My ruby installed version is ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]
You are herooo!
10

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

2 Comments

I upgraded to Catalina (which switches from bash to zsh) and I forgot to copy everything from .bash_profile over to .zshrc
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.
9

PLEASE USE SUDO WITH CARE!!!!!! ONLY IF YOU KNOW WHAT YOU ARE DOING!!!!!!!!!!!!

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

sudo gem update 

2 Comments

By far the simplest solution for anyone who doesn't want to do a full-blown installation of ruby + package managers + etc etc.
You should never ever use sudo to install any kind of development dependencies you don't have control over.
9

Tested on M1 MacBook Air (assuming Homebrew installed)

Following to the top answer, we can run:

brew install chruby ruby-install 

To install the latest stable ruby:

ruby-install ruby 

Then get the version number by running:

chruby 

In your ~/.zshrc file:

export PATH=/opt/homebrew/bin:$PATH source /opt/homebrew/opt/chruby/share/chruby/chruby.sh source /opt/homebrew/opt/chruby/share/chruby/auto.sh chruby 3.1.2 

The "3.1.2" is the output I got when running chruby. Make sure you add that one line at the end.

Remember to restart the terminal each time you install a new gem.

Comments

7

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

2 Comments

export GEM_HOME="$HOME/.gem" worked for me
WOW... This worked for me export GEM_HOME="$HOME/.gem"
7

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.

Comments

7

I also struggled with this Ruby problem and finally found an easy and working solution for Mac with M1 chip.

To install Ruby I used a simple ruby manager called chruby (https://github.com/postmodern/chruby#readme)

Steps:

  1. Install Homebrew (video guide here: https://youtu.be/IWJKRmFLn-g)
  2. Install chruby with command:
brew install chruby ruby-install 
  1. Install the latest ruby version with command:
ruby-install ruby 
  1. Edit .zshrc file. You can use nano or any other text editor. .zshrc file is located in root directory and is a hidden file. This file is responsible for Terminal commands.
nano ~/.zshrc 
  1. Add these two lines to .zshrc file and save it. Instead of 3.2.2 put Ruby version you installed in Step 3. It will make Terminal use selected version of Ruby.
source /opt/homebrew/opt/chruby/share/chruby/chruby.sh chruby 3.2.2 
  1. Close and reopen Terminal
  2. Check which version of Ruby is currently in use with command:
ruby -v 

Comments

5

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.

2 Comments

was missing setting the shell and global. Why isn't that in rbenv instructions 🤔
Not sure, why this was missed, I was able to find out after trying out.
4

I deleted those directories by using the below command

sudo rm -rf \ /Library/Ruby/Gems/2.6.0/{build_info,cache,doc,extensions,gems} \ /Library/Ruby/Gems/2.6.0/specifications/*.gemspec \ /Library/Ruby/Site 

then installed cocoa pods using sudo gem install cocoapods and it worked for me. Thanks

1 Comment

This solved my problem when install gollum and cocoapods
4

After install rbenv ,I also have this problem , add this line in my .bashrc :

eval "$(rbenv init -)"

solved my problem.

Comments

4

I created a Kotlin Multiplatform App for the first time and got CocoaPods not installed error during the Build time by Android Studio. Then, I wanted to install CocoaPods for using the KMM project;

sudo gem install cocoapods 

When I tried to install it by the Terminal, I got this error:

You don't have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory directory 

Solution First, you should run this command in the Terminal:

brew install ruby-install chruby 

Second, to enable auto-switching of Rubies specified by ruby-version files, add the following to ~/.bash_profile or ~/.zshrc:

source /opt/homebrew/opt/chruby/share/chruby/auto.sh source /opt/homebrew/opt/chruby/share/chruby/chruby.sh 

Third, check the Ruby stable versions and then add the following to ~/.bash_profile or ~/.zshrc:

chruby ruby-3.3.0 

Fourth, install the Ruby:

ruby-install --latest ruby 

Now, you have to restart your terminal and then install CocoaPods :

sudo gem install cocoapods 

Comments

3

For latest OS versions

  1. First run sudo xcode-select --switch /
  2. sudo gem install cocoapods --user-install

this did it for me

1 Comment

Thank you, you solution works with me, I was looking for this answer to fix cocoapods on my mac!
3

for Mac OS 12 and above also for 13 Xcode 14 and above

first you call

export GEM_HOME="$HOME/.gem" after that gem install cocoapods

home its help you ☺️

1 Comment

Lifesaver... quick and effective.
3

First, run the following command to install Ruby Gems in your user directory:

gem install activesupport -v 6.1.7.3 --user-install

Comments

3

What solved the issue for me: add to your ~/.bash_profile or ~/.zshrc

eval "$(rbenv init -)" 

Then Ruby version of local directory is picked correctly instead of system Ruby version being picked. And I was able to install bundler

Comments

2

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.

Comments

2

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

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

Comments

2

rbenv global 2.6.3 helped me solve this problem.

Comments

2

For Apple chip machines like M1, M2 etc

Quick and easy

We doesn't require to download the gem.

Instead of above answers we can do following steps.

So At First.

We have to install Rosetta

softwareupdate --install-rosetta 

Install homebrew

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

Remember to fresh install, uninstall previous once.

 sudo gem uninstall cocoapods 

Now Install cocoapods

 brew install cocoa pods 

It worked fine for me and thank to the article which is mentioned below.

you can checkout the medium article

1 Comment

Did those steps, but the last one gives: command not found: brew
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!

Comments

1

Solution for MAC. run the command

sudo gem update 

then type your Mac password when prompted

Comments

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

Comments

1
  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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.