How to reload available rubygems in a long running process

T

Tom Werner

In my Ruby monitoring framework, god, I have the ability to load
configuration files into an already running god instance. This allows
the user to create new watches without having to restart god. There is a
problem, however, if the config file to be loaded requires a gem that
was installed *after* god was started. The rubygems system discovers and
caches the available gems when it is initially required, ignoring any
gems that are installed after that.

I have not been able to find an easy way to have rubygems reload its
cache of available gems from a running Ruby program. Does anyone know of
a decent way to accomplish this?

--
Tom Preston-Werner

* Libraries:
Chronic (chronic.rubyforge.org)
God (god.rubyforge.org)
Fuzed (fuzed.rubyforge.org)
* Site:
rubyisawesome.com
 
E

Eric Hodel

In my Ruby monitoring framework, god, I have the ability to load
configuration files into an already running god instance. This
allows the user to create new watches without having to restart
god. There is a problem, however, if the config file to be loaded
requires a gem that was installed *after* god was started. The
rubygems system discovers and caches the available gems when it is
initially required, ignoring any gems that are installed after that.

I have not been able to find an easy way to have rubygems reload
its cache of available gems from a running Ruby program. Does
anyone know of a decent way to accomplish this?

Gem.clear_paths
 
T

Tom Werner

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

Gem.clear_paths
This does not appear to work. Here is my test procedure:

# --> cheat gem is NOT installed

require 'rubygems'

begin
require 'cheat'
rescue LoadError
# --> so this gets executed
puts 'fail'
end

gets

# --> program pauses and I install cheat gem
# sudo gem install cheat

Gem.clear_paths

begin
require 'cheat'
rescue LoadError
# --> require STILL fails even though Gem:all_load_paths
# now contains the cheat gem's directory
puts 'fail'
end

--
Tom Preston-Werner

* Libraries:
Chronic (chronic.rubyforge.org)
God (god.rubyforge.org)
Fuzed (fuzed.rubyforge.org)
* Site:
rubyisawesome.com
 
T

Tom Werner

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

On Nov 12, 2007, at 10:48 , Tom Werner wrote:
I have not been able to find an easy way to have rubygems reload
its cache of available gems from a running Ruby program. Does
anyone know of a decent way to accomplish this?

Gem.clear_paths

This does not appear to work. Here is my test procedure:

[...]

Hrm, with RubyGems 0.9.4.7 I ran your script and I get one fail, not
two.

Interesting. I've verified that it does indeed work with 0.9.4.7. I was
previously using 0.9.4. Thanks for your help!

--
Tom Preston-Werner

* Libraries:
Chronic (chronic.rubyforge.org)
God (god.rubyforge.org)
Fuzed (fuzed.rubyforge.org)
* Site:
rubyisawesome.com
 
E

Eric Hodel

Interesting. I've verified that it does indeed work with 0.9.4.7. I
was
previously using 0.9.4. Thanks for your help!

I think that 0.9.4 was resetting the wrong variable, but that's a dim
memory. The beta should become 0.9.5 next week.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,270
Messages
2,571,352
Members
48,034
Latest member
BettinaArn

Latest Threads

Top