Home of the gems?


#1

I’m trying to understand how gems are loaded. Please help.

A little background:

I decided to do some rails development work on a debian system. I didn’t
think rails was up to date, so I tried to do a ‘gem update rails’. This
failed because I did not have root access. So I installed the gems
locally.
Everthing seemed fine.

I later deleted the local gem directory. Now:

  • “gem list” says there are no gems.
  • “gemwhich rails” says "can’t find rails.
  • The application runs fine.

By now it is clear to me that there are gems installed in the default
location. I would like to override this with a local install. I don’t
understand how the load path is determined.

Thanks for your help.

-Kelly


#2

railsinator wrote:

I’m trying to understand how gems are loaded. Please help.

A little background:

I decided to do some rails development work on a debian system. I didn’t
think rails was up to date, so I tried to do a ‘gem update rails’. This
failed because I did not have root access. So I installed the gems
locally.
Everthing seemed fine.

I later deleted the local gem directory. Now:

  • “gem list” says there are no gems.
  • “gemwhich rails” says "can’t find rails.
  • The application runs fine.

By now it is clear to me that there are gems installed in the default
location. I would like to override this with a local install. I don’t
understand how the load path is determined.

Thanks for your help.

‘gem env’ will give you some information about your gem environment.
You can control the details here via environment variables:

GEM_HOME – Path to gem repository where gems are installed by
default.
GEM_PATH – List of paths of gem repositories to be searched.

– Jim W.


#3

Thanks for getting back to me Jim. Please bear with me as I try to
understand how this works.

If I do “gem env” I get a stack trace:

kfelkins@lurch:~/bin$ gem env
/usr/local/lib/site_ruby/1.8/rubygems.rb:194:in report_activate_error': Could not find RubyGem sources (> 0.0.0) (Gem::LoadError) from /usr/local/lib/site_ruby/1.8/rubygems.rb:136:inactivate’
from /usr/local/lib/site_ruby/1.8/rubygems.rb:37:in
require_gem_with_options' from /usr/local/lib/site_ruby/1.8/rubygems.rb:31:inrequire_gem’
from
/usr/local/lib/site_ruby/1.8/rubygems/remote_installer.rb:403:in
sources' from /usr/local/lib/site_ruby/1.8/rubygems/gem_commands.rb:897:inexecute’
from /usr/local/lib/site_ruby/1.8/rubygems/command.rb:49:in invoke' from /usr/local/lib/site_ruby/1.8/rubygems/cmd_manager.rb:92:inprocess_args’
from /usr/local/lib/site_ruby/1.8/rubygems/cmd_manager.rb:65:in
run' from /usr/local/lib/site_ruby/1.8/rubygems/gem_runner.rb:9:inrun’
from /home/kfelkins/bin/gem:17
kfelkins@lurch:~/bin$

Still, my rails app will run when I start it with script/server.

So clearly there are a set of gems installed somewhere. These were
likely
installed via the debian package management system. So how are gems
found?

kfelkins@lurch:~/bin$ echo $GEM_HOME
/home/kfelkins/gem-repository
kfelkins@lurch:~/bin$ ls -l $GEM_HOME
total 16
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 cache
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 doc
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 gems
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 specifications
kfelkins@lurch:~/bin$ cd $GEM_HOME/gems
kfelkins@lurch:~/gem-repository/gems$ ls
kfelkins@lurch:~/gem-repository/gems$ echo $GEM_PATH
kfelkins@lurch:~/gem-repository/gems$

Thanks again.

-Kelly


#4

railsinator wrote:

Thanks for getting back to me Jim. Please bear with me as I try to
understand how this works.

If I do “gem env” I get a stack trace:

kfelkins@lurch:~/bin$ gem env
/usr/local/lib/site_ruby/1.8/rubygems.rb:194:in report_activate_error': Could not find RubyGem sources (> 0.0.0) (Gem::LoadError) from /usr/local/lib/site_ruby/1.8/rubygems.rb:136:inactivate’
from /usr/local/lib/site_ruby/1.8/rubygems.rb:37:in
require_gem_with_options' from /usr/local/lib/site_ruby/1.8/rubygems.rb:31:inrequire_gem’
from
/usr/local/lib/site_ruby/1.8/rubygems/remote_installer.rb:403:in
sources' from /usr/local/lib/site_ruby/1.8/rubygems/gem_commands.rb:897:inexecute’
from /usr/local/lib/site_ruby/1.8/rubygems/command.rb:49:in invoke' from /usr/local/lib/site_ruby/1.8/rubygems/cmd_manager.rb:92:inprocess_args’
from /usr/local/lib/site_ruby/1.8/rubygems/cmd_manager.rb:65:in
run' from /usr/local/lib/site_ruby/1.8/rubygems/gem_runner.rb:9:inrun’
from /home/kfelkins/bin/gem:17
kfelkins@lurch:~/bin$

Still, my rails app will run when I start it with script/server.

So clearly there are a set of gems installed somewhere. These were
likely
installed via the debian package management system. So how are gems
found?

kfelkins@lurch:~/bin$ echo $GEM_HOME
/home/kfelkins/gem-repository
kfelkins@lurch:~/bin$ ls -l $GEM_HOME
total 16
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 cache
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 doc
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 gems
drwxrwxr-x 2 kfelkins genome 4096 2005-12-08 17:15 specifications
kfelkins@lurch:~/bin$ cd $GEM_HOME/gems
kfelkins@lurch:~/gem-repository/gems$ ls
kfelkins@lurch:~/gem-repository/gems$ echo $GEM_PATH
kfelkins@lurch:~/gem-repository/gems$

Ok, it looks like you no longer have the system gem repository in your
GEM_PATH. Gem can’t find its sources gem.

Try adding the original repository to the GEM_PATH. Perhaps something
like this:

export GEM_PATH=/usr/local/lib/ruby/gems/1.8

(you might need to tweek the directory for your local system).

Once you add that line, gems should search both your $GEM_HOME
repository and the GEM_PATH repository. You can add more repositories
to GEM_PATH if you wish.

– Jim W.


#5

railsinator wrote:

I think rails can find the gems. Do you know how rails does it?

I’m not certain that rails uses gems after an application has been
created. Rails is installed as a collection of gems, but I guess it is
possible that when you create a rails application all of the required
libraries are copied or linked, though I doubt it.

hard to say without knowing more details. Some possibilities are:

(1) Rails comes in non-gem versions, is one of those installed?
(2) GEM_HOME is an environment variable. Although your interactive
shell was messed up, it could be that rails is running in a different
window with its own, properly setup, GEM_HOME value. (Possibly started
before you changed it).

– Jim W.


#6

I think rails can find the gems. Do you know how rails does it?

I’m not certain that rails uses gems after an application has been
created. Rails is installed as a collection of gems, but I guess it is
possible that when you create a rails application all of the required
libraries are copied or linked, though I doubt it.

-kelly


#7

Thanks Jim. I’m going to go with your #1. Since this is a debian system,
my
guess is rails was installed using apt-get. I also run debian on my
personal
systems but I don’t use apt-get to install rails – I use gems.

-Kelly