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