How do I use gems with Ubuntu?
Solution 1
Where are my Gems?
You can find where your gems are stored using the gem environment
command. For example:
chris@chris-laptop:~$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.2
- RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
- INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /usr/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /usr/lib/ruby/gems/1.8
- /home/chris/.gem/ruby/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
If you look at the "GEM PATHS:" section you can see that gems can be stored in two places on my laptop: /usr/lib/ruby/gems/1.8
or in the .gem
directory in my home dir.
You can also see that executables are stored in EXECUTABLE DIRECTORY which in this case is /usr/bin
.
Because /usr/bin
is in my path this lets me run cap
, merb
, rails
etc.
Updating your PATH
If for some reason your EXECUTABLE DIRECTORY isn't on your path (for example if it is /var/lib/gems/1.8/bin) then you need to update your PATH variable.
Assuming that you are using the bash shell. You can do this quickly for the current session by typing the following at the shell prompt; let's pretend that you want to add /var/lib/gems/1.8/bin
to the path:
export PATH=$PATH:/var/lib/gems/1.8/bin
and press return. That appends the new directory to the end of the current path. Note the colon between $PATH
and /var/lib/gems/1.8/bin
To set the value for all sessions you will need to edit either your .profile
or .bashrc
file and add the same line to the end of the file. I usually edit my .bashrc
file for no reason other than that's what I've always done. When finished, save the file and then refresh your environment by typing:
bash
at the shell prompt. That will cause the .bashrc
to get reread.
At any point you can check the current value of $PATH
by typing
echo $PATH
at the shell prompt.
Here's a sample from one of my own servers, where my username is "chris" and the machine name is "chris-laptop":
chris@chris-laptop:~$
chris@chris-laptop:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
chris@chris-laptop:~$
chris@chris-laptop:~$ export PATH=$PATH:/var/lib/gems/1.8/bin
chris@chris-laptop:~$
chris@chris-laptop:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/lib/gems/1.8/bin
chris@chris-laptop:~$
My Gem won't load!
"Ruby gems won't load even though installed" highlights a common problem using multiple different versions of Ruby; Sometimes the Gem environment and Gem path get out of sync:
rb(main):003:0> Gem.path
=> ["/opt/ruby1.9/lib/ruby1.9/gems/1.9.1"]
irb(main):004:0> exit
Any Ruby process here is looking only in one place for its Gems.
:~/$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.7
- RUBY VERSION: 1.9.1 (2009-05-12 patchlevel 129) [x86_64-linux]
- INSTALLATION DIRECTORY: /opt/ruby1.9/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /opt/ruby1.9/bin/ruby1.9
- EXECUTABLE DIRECTORY: /opt/ruby1.9/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /opt/ruby1.9/lib/ruby/gems/1.9.1
- /home/mark/.gem/ruby/1.9.1
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
Look carefully at the output of gem environment:
- GEM PATHS:
- /opt/ruby1.9/lib/ruby/gems/1.9.1
This isn't the same path as returned by Gem.path:
["/opt/ruby1.9/lib/ruby1.9/gems/1.9.1"]
It's hard to say what exactly caused lib/ruby
to change to lib/ruby1.9
but most likely the developer was working with multiple Ruby versions. A quick mv
or ln
will solve the problem.
If you do need to work with multiple Ruby versions then you really should be using rvm.
Solution 2
As noted by @Chris you need to add the gems environment to your path. You can do this by:
echo 'export PATH=$PATH:/var/lib/gems/1.8/bin' | tee --append ~/.bashrc
Solution 3
The folder in which gems are stored must be on your PATH, for example mine is:
/home/victor/.gem/ruby/1.8/bin
Check your path by typing
echo $PATH
Related videos on Youtube

0x26res
Updated on July 05, 2022Comments
-
0x26res about 1 year
I recently upgraded to Ubuntu 9.04 and I have issues using gems. I installed Ruby, Rubygems and Rails using apt-get. The
rails
command does work.I then installed capistrano and other gems, such as heroku. In order to do that, I used the command:
sudo gem install XXX
When I want to use the
cap
command it does not work:bash: cap: command not found
It is the same with the other gem commands.
Do I have something particular to do so that the gem commands work?
-
0x26res about 14 yearsThanks for your answer Here is the content of ~/.gem/ruby/1.8/bin : activerecord-2.3.2 activesupport-2.3.2 heroku-0.9.1 json-1.1.6 rails-2.3.2 When I install capistrano from my home folder ~, it does not go in this folder. Furthermore, the heroku gem is in the right folder but the heroku command does not work. Also here is what the $PATH command returns: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-
Oleg Safarov about 14 yearsDoes your rails gem work? Please add your folder ~/.gem/ruby/1.8/bin to the path and give a try
-
0x26res about 14 yearsHow can I edit my $PATH so that it includes the two directory where the gems are installed ? Thanks
-
0x26res about 14 yearsI asked a question in order to know how to edit the $PATH: stackoverflow.com/questions/910088/how-can-i-edit-the-path- on-linux
-
0x26res about 14 yearsI did that : sudo ln -s /var/lib/gems/1.8/gems/capistrano-2.5.5/bin/cap /usr/local/bin/cap ln: creating symbolic link `/usr/local/bin/cap': File exists But it does not work ! It still get : bash: cap: command not found Here is my $PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/real/RealPlayer:/var/lib/gems/1.8:/home/arthur/.gem/ruby/1.8
-
0x26res about 14 yearsNow it works. I changed the path to: /var/lib/gems/1.8/bin:/home/arthur/.gem/ruby/1.8/bin
-
Kief about 13 yearsIs there a way to change the EXECUTABLE_DIRECTORY to something more standard, like /usr/bin or /usr/local/bin? Adding /var/lib/gems/1.8/bin to my path doesn't sit well, particularly since it has a version number in it.
-
dolzenko about 13 yearsWhen I wanted to change that on a system level I had to change that at
/etc/environment
-
mhartl almost 11 yearsTyping
bash
doesn't actually refresh your environment; it just opens a new shell in the current terminal. (You can even get back to the original shell using Ctrl-D.) It's true that the new environment includes the information from the updated.bashrc
file, but what you really want is to source the file to update the current shell:$ . ~/.bashrc
. (You can also use thesource
command, but.
is shorter.)