Bugs item #29114, was opened at 2011-04-05 06:22
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=575&aid=29114&group_id=126

Category: None
Group: None
>Status: Closed
Resolution: None
Priority: 3
Submitted By: Daniel DeLeo (danielsdeleo)
>Assigned to: Evan Phoenix (evan)
Summary: older gems interfere with loading paths from external gems

Initial Comment:
I'm seeing this issue with the Chef project. In the current release version, we 
have a bunch of files under chef/knife/whatever.rb In the current prerelease 
version, we have plugin support using Gem.find_files (thanks for the patch 
guys!), so we've moved much of this code out to separate gems. We strip the 
paths we get back from Gem.find_files to the normal relative paths (e.g., 
chef/knife/ec2_server_create) so that we can uniq them and rely on rubygems to 
load the latest version of the gem.

The problem I'm seeing is this:
Chef 0.9.14 has a file 'chef/knife/ec2_instance_data'
Chef 0.10.0 does not have this file.
the knife-ec2 plugin *does* have a file 'chef/knife/ec2_instance_data'

When I have both Chef 0.9.14 and Chef 0.10 installed and Chef 0.10 attempts to 
`require 'chef/knife/ec2_instance_data'`  it gets a LoadError


/Users/ddeleo/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:57:in
 `require': no such file to load -- chef/knife/ec2_instance_data (LoadError)
        from 
/Users/ddeleo/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:57:in
 `rescue in require'
        from 
/Users/ddeleo/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in
 `require'
        from 
/Users/ddeleo/.rvm/gems/ruby-1.9.2-p180/gems/chef-0.10.0.beta.6/lib/chef/knife/core/subcommand_loader.rb:39:in
 `block in load_commands'
# etc.
If I run `gem which chef/knife/ec2_instance_data`, I see that rubygems prefers 
the one in the old version of chef: 

gem which chef/knife/ec2_instance_data
/Users/ddeleo/.rvm/gems/ruby-1.9.2-p180/gems/chef-0.9.14/lib/chef/knife/ec2_instance_data.rb

When I uninstall the old version of chef, so that I have only the 0.10 beta, 
then chef 0.10 can successfully require the 'chef/knife/ec2_instance_data' 
file, and `gem which` reports that the file is located in the knife-ec2 gem.

----------------------------------------------------------------------

>Comment By: Evan Phoenix (evan)
Date: 2011-06-01 07:40

Message:
This feels like just a configuration error on the machine. The reason rubygems 
is raising a LoadError is because the path you've given it is ambigious on that 
system since the file is available via 2 gems (admittedly the error message 
should be better).

Given the scenario, there is really no way for rubygems to work out what course 
of action to take thusly there is really nothing that we can do it about this, 
rubygems wise.

Forcing the activation of knife-ec2 disambiguates the problem for rubygems and 
it's happy to then continue. Additionally, removing the old chef disambiguates 
things and allow it to continue.

Because rubygems activates gems via the paths their contain, there is no way to 
change rubygems to solve this problem.

----------------------------------------------------------------------

Comment By: Daniel DeLeo (danielsdeleo)
Date: 2011-04-05 06:27

Message:
Forcing activation of the plugin gem (e.g., knife-ec2 in the example) works 
around the error, though extracting the gem name is messy to say the least.

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=575&aid=29114&group_id=126
_______________________________________________
Rubygems-developers mailing list
http://rubyforge.org/projects/rubygems
Rubygems-developers@rubyforge.org
http://rubyforge.org/mailman/listinfo/rubygems-developers

Reply via email to