I just came to move some ruby scripts onto my mac mini, and to do so I needed to install a couple of gems. Now I realised I hadn’t installed or updated rubygems on the machine for a while, so I figured it was best to update
gem before installing the gems I wanted. Easier said than done.
At some point in the past I had added
http://gems.datamapper.org as a source to rubygems. Since then the datamapper project has discontinued using this gem source to serve up gems, so I was getting the following output:
mm:daemons caius$ sudo gem update --system Updating installed gems Bulk updating Gem source index for: http://gems.rubyforge.org/ ERROR: While executing gem ... (Gem::RemoteSourceException) HTTP Response 404 fetching http://gems.datamapper.org/yaml
Eeek! I can’t update because the source no longer exists. So I figured I’d remove the source before updating, that should work right? Wrong. It updates the sources before removing the source from the config it would appear.
mm:daemons caius$ sudo gem sources ** CURRENT SOURCES *** http://gems.rubyforge.org http://gems.datamapper.org mm:daemons caius$ sudo gem sources -r http://gems.datamapper.org Bulk updating Gem source index for: http://gems.rubyforge.org/ ERROR: While executing gem ... (Gem::RemoteSourceException) HTTP Response 404 fetching http://gems.datamapper.org/yaml
Oh balls. So how do I remove the source without updating it first. I need to update it to remove it, but to remove it I need to update from it. Gotta love catch 22s!
I remembered that
gem install has an option not to update sources,
--no-update-sources. So I figured thats gotta work when removing a source as well, but it doesn’t.
mm:daemons caius$ sudo gem sources -r http://gems.datamapper.org --no-update-sources ERROR: While executing gem ... (OptionParser::InvalidOption) invalid option: --no-update-sources
Oh crap. Now what do I do? Take my usual tactic and google for a hint of course! I’d considered trying to find where the gem config was and remove the source by hand, but I figured that wouldn’t be that simple. After hitting a couple of sites that weren’t relevant I ended up on the edge of complexity where he mentions the command
nano ~/.gemrc. Which made me wonder if that file contains the sources.
mm:daemons caius$ cat ~/.gemrc --- :update_sources: true :verbose: true :bulk_threshold: 1000 :sources: - http://gems.rubyforge.org - http://gems.datamapper.org :backtrace: false :benchmark: false
All I needed to do was remove the
- http://gems.datamapper.org line and poof,
gem was working again. One quick
gem update --system later and I was upgraded from gem 1.1.1 to 1.3.1 and installing the gems I needed.