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
[email protected]
http://rubyforge.org/mailman/listinfo/rubygems-developers