'sudo gem install' or 'gem install' and gem locations
Contrary to all the other posts I suggest NOT using
sudo when installing gems.
Instead I recommend you install RVM and start a happy life with portable gem homes and different version of Ruby all living under one roof.
For the uninitiated, from the documentation:
RVM is a command line tool which allows us to easily install, manage and work with multiple ruby environments and sets of gems.
The reason why installing gems with
sudo is worse than just
gem install is because it installs the gems for ALL USERS as
root. This might be fine if you're the only person using the machine, but if you're not it can cause weirdness.
If you decide you want to blow away all your gems and start again it's much easier, and safer, to do so as a non-root user.
If you decide you want to use
RVM then using
sudo will cause all kinds of weirdness because each Ruby version you install through
RVM has its own GEM_HOME.
Also, it's nice if you can make your development environment as close to your production environment as possible, and in production you'll most likely install gems as a non-root user.
Specify gem installation directory
You can add the following to your config.ru file:
This will tell your rack app where to look for gems.
Also configure your server .bashrc:
How to find where gem files are installed
gem environment to find out about your gem environment:
- RUBYGEMS VERSION: 2.1.5
- RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [x86_64-darwin12.4.0]
- INSTALLATION DIRECTORY: /Users/ttm/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0
- RUBY EXECUTABLE: /Users/ttm/.rbenv/versions/2.0.0-p247/bin/ruby
- EXECUTABLE DIRECTORY: /Users/ttm/.rbenv/versions/2.0.0-p247/bin
- SPEC CACHE DIRECTORY: /Users/ttm/.gem/specs
- RUBYGEMS PLATFORMS:
- GEM PATHS:
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- SHELL PATH:
Notice the two sections for:
How to stop sudo installing gems. The ultimate solution
In order to stop installing ruby gems from sudo just use
rbenv apps, they allow to mount system rubies, otherwise all the gems will be installed to system folder since
rubygem app is also installed to system. That is proper way to use gems for each project, but also you can specify in ~/.gemrc another folder in your home or in var/ folder:
gem: --no-rdoc --no-ri
Use sudo for gem install cocoapods
It seems you are not using any package manager. Since, you don't have write permission to this directory, there is nothing wrong in using
However, I prefer changing ownership of that directory, so that I don't have to use
sudo every time.
sudo chown -R [login name] /Library/Ruby/Gems/2.0.0
and ensure that I have write permission.
sudo chmod -R u+w /Library/Ruby/Gems/2.0.0
rvm (ruby version manager) or
How to install a gem or update RubyGems if it fails with a permissions error
You don't have write permissions into the /Library/Ruby/Gems/1.8 directory.
means exactly that, you don't have permission to write there.
That is the version of Ruby installed by Apple, for their own use. While it's OK to make minor modifications to that if you know what you're doing, because you are not sure about the permissions problem, I'd say it's not a good idea to continue along that track.
Instead, I'll strongly suggest you look into using either rbenv or RVM to manage a separate Ruby, installed into a sandbox in your home directory, that you can modify/fold/spindle/change without worrying about messing up the system Ruby.
Between the two, I use rbenv, though I used RVM a lot in the past. rbenv takes a more "hands-off" approach to managing your Ruby installation. RVM has a lot of features and is very powerful, but, as a result is more intrusive. In either case, READ the installation documentation for them a couple times before starting to install whichever you pick.
Why do gem and sudo gem have different installation directories?
RVM uses environment variables to configure rubygems - the
gem command, basically if you have user installation (
~/.rvm) you should not need to use to call any commands with
gem - that if worked would install rail as
root user in your home directory, making it impossible for you to manage your files ... if you have any good reasons to use
sudo - use
rvmsudo instead - but really you should not have that need, especially to install gems.
If you want to have some commands available in your system (like
gist) you can use
rvm wrapper and link generated binary in
to fix permissions in your home:
sudo chown $USER: ~/.rvm
sudo chmod u+rw ~/.rvm