Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
“OS X Mavericks RubyGems cleanup issue” blog post: https://jaydenseric.com/blob/os-x-mavericks-rubygems-cleanup-issue.

OS X Mavericks RubyGems cleanup issue

Ever tried sudo gem cleanup in OS X Mavericks only to be hit with errors like this?

Attempting to uninstall sqlite3-1.3.7
Unable to uninstall sqlite3-1.3.7:
  Gem::InstallError: sqlite3 is not installed in GEM_HOME, try:
  gem uninstall -i /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0 sqlite3

Google is a bit of a let down here, but don’t worry, there is an easier workaround than individually uninstalling each outdated gem as the error message suggests. Luckily there are a few ancient posts (like this one) describing the same issue in older versions of OS X and with a few tweaks the fix still works.

Disclaimer

The “correct” answer to this problem is to not use the system RubyGems in the first place in favour of something like RVM. I have my reasons for not doing that this time and you probably do too. I am not a Terminal/Ruby guru, the following is my best understanding and what has worked for me.

Cause

Ruby gems can be installed in 3 locations and gem cleanup does not look in all of them. Try gem environment and take a look at the GEM PATHS list. Mine looks like this:

  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/jaydenseric/.gem/ruby/2.0.0
     - /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0

Some gems start their life in the OS X default location in /System/.... Their updated versions however automatically get placed in /Library/... or /Users/... depending if you used sudo gem update or just gem update. New gems you add yourself don’t get placed in the /System/... location and should not be problematic.

Solution

A nice workaround is to temporarily get gem cleanup to also look in the /System/... location. Once the outdated and awkwardly stored gems are removed from there everything should live happily ever after. Following a problematic sudo gem update, use:

sudo sh -c 'GEM_HOME=/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0 gem cleanup'

You will need to repeat this every time gems in /System/... are updated until they have all been moved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.