Bugs item #22770, was opened at 2008-11-12 09:34 You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=575&aid=22770&group_id=126
Category: `gem` commands (other) Group: v1.3.x Status: Closed Resolution: Accepted Priority: 3 Submitted By: Andrew Reeve (dru) Assigned to: Daniel Berger (djberg96) Summary: Gem::InstallError when running gem clean in osx 10.5.5 (v.1.3.1) Initial Comment: Since updating to ruygems 1.3.1 (from 1.2) whenever I run sudo gem clean I get the following message for any gem version that comes bundled with leopard: Cleaning up installed gems... Attempting to uninstall ferret-0.11.4 ERROR: While executing gem ... (Gem::InstallError) Unknown gem ferret = 0.11.4 With rubygems 1.2 it used to just skip over the pre-installed gems when I tried to clean and then carried on cleaning up the other gems. Now, because of this error it stops straight away meaning I have to do all of my cleanup by hand a gem at a time. Initially I though my gems were broken, but if I drop back down to rubygems 1.2 everything works fine, and in the interests of being thorough this problem also persists after I do a clean install of the entire operating system. This is the output of "gem env" RubyGems Environment: - RUBYGEMS VERSION: 1.3.1 - RUBY VERSION: 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8 - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby - EXECUTABLE DIRECTORY: /usr/bin - RUBYGEMS PLATFORMS: - ruby - universal-darwin-9 - GEM PATHS: - /Library/Ruby/Gems/1.8 - /Users/Dru/.gem/ruby/1.8 - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - :sources => ["http://gems.rubyforge.org", "http://gems.github.com"] - REMOTE SOURCES: - http://gems.rubyforge.org - http://gems.github.com and this is the debug information from when I run "sudo gem clean" [Dru ~] sudo gem --debug clean Password: Exception `NameError' at /Library/Ruby/Site/1.8/rubygems/command_manager.rb:134 - uninitialized constant Gem::Commands::CleanupCommand Cleaning up installed gems... Exception `NameError' at /Library/Ruby/Site/1.8/rubygems/command_manager.rb:134 - uninitialized constant Gem::Commands::UninstallCommand Attempting to uninstall ferret-0.11.4 Exception `Gem::InstallError' at /Library/Ruby/Site/1.8/rubygems/uninstaller.rb:61 - Unknown gem ferret = 0.11.4 ERROR: While executing gem ... (Gem::InstallError) Unknown gem ferret = 0.11.4 /Library/Ruby/Site/1.8/rubygems/uninstaller.rb:61:in `uninstall' /Library/Ruby/Site/1.8/rubygems/commands/cleanup_command.rb:78:in `execute' /Library/Ruby/Site/1.8/rubygems/commands/cleanup_command.rb:65:in `each' /Library/Ruby/Site/1.8/rubygems/commands/cleanup_command.rb:65:in `execute' /Library/Ruby/Site/1.8/rubygems/command.rb:136:in `invoke' /Library/Ruby/Site/1.8/rubygems/command_manager.rb:105:in `process_args' /Library/Ruby/Site/1.8/rubygems/command_manager.rb:75:in `run' /Library/Ruby/Site/1.8/rubygems/gem_runner.rb:39:in `run' /usr/bin/gem:24 It's almost like it isn't seeing the gem repository located in "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8" I'll gladly submit any additional information you might need. ---------------------------------------------------------------------- Comment By: Hedge Hog (hedgehog) Date: 2010-05-09 08:14 Message: Also seeing this on ruby-1.9.1-p378, installed under rvm. $ gem cleanup --debug Exception `NameError' at /home/hedge/.rvm/rubies/ruby-1.9.1-p378/lib/ruby/site_ruby/1.9.1/rubygems/command_manager.rb:163 - uninitialized constant Gem::Commands::CleanupCommand Cleaning up installed gems... Clean Up Complete $ gem env RubyGems Environment: - RUBYGEMS VERSION: 1.3.6 - RUBY VERSION: 1.9.1 (2010-01-10 patchlevel 378) [x86_64-linux] - INSTALLATION DIRECTORY: /home/hedge/.rvm/gems/ruby-1.9.1-p378 - RUBY EXECUTABLE: /home/hedge/.rvm/rubies/ruby-1.9.1-p378/bin/ruby - EXECUTABLE DIRECTORY: /home/hedge/.rvm/gems/ruby-1.9.1-p378/bin - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /home/hedge/.rvm/gems/ruby-1.9.1-p378 - /home/hedge/.rvm/gems/ruby-1.9.1-p...@global - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - :gem => "--no-rdoc --no-ri" - REMOTE SOURCES: - http://rubygems.org/ ---------------------------------------------------------------------- Comment By: John Stehle (jstehle) Date: 2009-03-10 18:44 Message: What was the fix. Is there a patch available? or should I do a gem update --system? Thanks ---------------------------------------------------------------------- Comment By: Eric Hodel (drbrain) Date: 2009-03-08 21:04 Message: Fixed by Ryan Davis. ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-02-11 06:09 Message: Not much to report at the moment. This is going to be a tough one to solve I'm sorry to say. Much tougher than it ought to be. Dan ---------------------------------------------------------------------- Comment By: John Stehle (jstehle) Date: 2009-02-10 18:13 Message: Any update on this? Thanks ---------------------------------------------------------------------- Comment By: John Stehle (jstehle) Date: 2009-01-28 20:50 Message: I am on a MacBook OS X 10.5.6 and I am having the same issues with clean/cleanup as noted in this ticket. I also can not get uninstall to work either. I would hazard a guess it has the same issues that cleanup does. Any ETA when this will be set right? I'm starting a new project and would like to get my house in order. Also I have GEM_HOME=/Library/Ruby/Gems/1.8 set in my shell Thanks in advance John gems$ pwd /Library/Ruby/Gems/1.8/gems gems$ gems$ gems$ ls merb-core* merb-core-1.0.7.1: CHANGELOG LICENSE README TODO lib CONTRIBUTORS PUBLIC_CHANGELOG Rakefile bin merb-core-1.0.8: CHANGELOG LICENSE README TODO lib CONTRIBUTORS PUBLIC_CHANGELOG Rakefile bin merb-core-1.0.8.1: CHANGELOG LICENSE README TODO lib CONTRIBUTORS PUBLIC_CHANGELOG Rakefile bin gems$ gems$ gems$ sudo gem uninstall --version '= 1.0.7.1' merb-core --debug Exception `NameError' at /Library/Ruby/Site/1.8/rubygems/command_manager.rb:134 - uninitialized constant Gem::Commands::UninstallCommand Exception `Gem::InstallError' at /Library/Ruby/Site/1.8/rubygems/uninstaller.rb:61 - Unknown gem merb-core = 1.0.7.1 ERROR: While executing gem ... (Gem::InstallError) Unknown gem merb-core = 1.0.7.1 /Library/Ruby/Site/1.8/rubygems/uninstaller.rb:61:in `uninstall' /Library/Ruby/Site/1.8/rubygems/commands/uninstall_command.rb:63:in `execute' /Library/Ruby/Site/1.8/rubygems/commands/uninstall_command.rb:61:in `each' /Library/Ruby/Site/1.8/rubygems/commands/uninstall_command.rb:61:in `execute' /Library/Ruby/Site/1.8/rubygems/command.rb:136:in `invoke' /Library/Ruby/Site/1.8/rubygems/command_manager.rb:105:in `process_args' /Library/Ruby/Site/1.8/rubygems/command_manager.rb:75:in `run' /Library/Ruby/Site/1.8/rubygems/gem_runner.rb:39:in `run' /usr/bin/gem:24 gems$ gems$ gems$ gems$ gems$ cat ~/.gemrc --- :verbose: true :benchmark: false :sources: - http://edge.merbivore.com - http://gems.rubyforge.org/ :update_sources: true :backtrace: false :bulk_threshold: 1000 gems$ gems$ gems$ gems$ gem env RubyGems Environment: - RUBYGEMS VERSION: 1.3.1 - RUBY VERSION: 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8 - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby - EXECUTABLE DIRECTORY: /usr/bin - RUBYGEMS PLATFORMS: - ruby - universal-darwin-9 - GEM PATHS: - /Library/Ruby/Gems/1.8 - /Users/johnstehle/.gem/ruby/1.8 - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - :sources => ["http://edge.merbivore.com", "http://gems.rubyforge.org/"] - REMOTE SOURCES: - http://edge.merbivore.com - http://gems.rubyforge.org/ gems$ gems$ gems$ ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-01-04 16:24 Message: Grr, the logic should be: if @options[:install_dir] paths = [...@options[:install_dir]] else paths = Gem.path.uniq end paths.each do |path| path = File.expand_path(path) spec_dir = File.join(path, 'specifications') unless File.exists?(spec_dir) raise ArgumentError, "path '#{spec_dir}' not found" end source_index = Gem::SourceIndex.from_gems_in(spec_dir) list = source_index.find_name(@gem, @version) ... ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-01-04 16:23 Message: Whoops, the logic should be: paths.each do |path| path = File.expand_path(path) spec_dir = File.join(path, 'specifications') ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-01-04 16:21 Message: Alright, digging through this some more has revealed some deeper fundamental issues. But, let's step back to the immediate fix. The first thing to to is to add a '-i' option to cleanup_command.rb. Not only is it more convenient, it eliminates the need to hard code the install_dir in the super call. That's something we don't want hard coded. The next thing to do is to modify uninstaller.rb so that it iterates over Gem.path, unless the -i option is specified, in which case _only_ that path will be cleaned. Previously it was defaulting to a hard coded install_dir, which was set to Gem.dir. So, our logic for the uninstall method looked something like this: paths.each do |path| if @options[:install_dir] paths = [...@options[:install_dir]] else paths = Gem.path.uniq end path = File.expand_path(path) spec_dir = File.join(path, 'specifications') unless File.exists?(spec_dir) raise ArgumentError, "path '#{spec_dir}' not found" end source_index = Gem::SourceIndex.from_gems_in(spec_dir) list = source_index.find_name(@gem, @version) ... Unfortunately, what I've discovered is that the dependency list (in dependency_list.rb) once again only checks in Gem.dir, not every Gem.path, causing it to blow up with: Exception `NoMethodError' at C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_list.rb:86 - undefined method `name' for nil:NilClass ERROR: While executing gem ... (NoMethodError) undefined method `name' for nil:NilClass C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_list.rb:86:in `ok_to_remove?' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91:in `find_all' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_list.rb:85:in `each' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_list.rb:85:in `find_all' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_list.rb:85:in `ok_to_remove?' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:242:in `dependencies_ok?' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:185:in `remove' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:113:in `uninstall_gem' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:97:in `uninstall' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:66:in `each' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:66:in `uninstall' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/cleanup_command.rb:83:in `execute' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/cleanup_command.rb:70:in `each' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/cleanup_command.rb:70:in `execute' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command.rb:136:in `invoke' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:105:in `process_args' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:75:in `run' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:39:in `run' C:/Ruby/bin/gem:24 Still working on it. ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-01-04 15:11 Message: My initial attempt to just return if not found didn't work. I tried this in uninstaller.rb: if list.empty? then return But, it never seems to actually clean the gem, though it gives the impression that it did: c:\staging\gems>gem clean Cleaning up installed gems... Attempting to uninstall ptools-1.1.5 Clean Up Complete c:\staging\gems>gem clean Cleaning up installed gems... Attempting to uninstall ptools-1.1.5 Clean Up Complete Still working on it. ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-01-04 14:52 Message: I'm able to duplicate this on my Windows box. This demonstrates the problem: set GEM_PATH=c:\staging gem install ptools -i c:\staging gem install ptools --version=1.1.5 -i c:\staging gem clean Exception `Gem::InstallError' at C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:61 - Unknown gem ptools = 1.1.5 ERROR: While executing gem ... (Gem::InstallError) Unknown gem ptools = 1.1.5 C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/uninstaller.rb:61:in `uninstall' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/cleanup_command.rb:78:in `execute' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/cleanup_command.rb:65:in `each' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/cleanup_command.rb:65:in `execute' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command.rb:136:in `invoke' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:105:in `process_args' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:75:in `run' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:39:in `run' C:/Ruby/bin/gem:24 The problem is that 'gem clean' is detecting that there's an older gem in one of my gem paths, but it proceeds to assume that it's in _every_ gem path. When it can't find it in one of the other paths it blows up. Working on it... ---------------------------------------------------------------------- You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=575&aid=22770&group_id=126 _______________________________________________ Rubygems-developers mailing list http://rubyforge.org/projects/rubygems Rubygems-developers@rubyforge.org http://rubyforge.org/mailman/listinfo/rubygems-developers