Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I use gems with Ubuntu?

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?

like image 353
0x26res Avatar asked May 26 '09 08:05

0x26res


People also ask

What is the gem command?

The gem command allows you to interact with RubyGems. Ruby 1.9 and newer ships with RubyGems built-in but you may need to upgrade for bug fixes or new features. To upgrade RubyGems, visit the download page. If you want to see how to require files from a gem, skip ahead to What is a gem. Finding Gems.

How do I install gem packages?

With the --local ( -l ) option, you would perform a local search through your installed gems. 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.

What is the difference between GEM and plugin?

The basic difference is a gem is something that needs to be installed on the system running your Rails application, whereas a plugin is deployed along with your application. More specifically, plugins live in vendor/plugins whereas gems need to be install using rake gem install gem_name.

How do I install a downloaded GEM file?

In the console be located in the gems cache (cd [Ruby Installation version]/lib/ruby/gems/[Ruby version]/cache ) and fire the gem install anygemwithdependencieshere (by example cucumber-2.99. 0 )


2 Answers

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.

like image 68
Chris McCauley Avatar answered Sep 29 '22 10:09

Chris McCauley


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 
like image 40
Adam Greenhall Avatar answered Sep 29 '22 11:09

Adam Greenhall