OS X Mavericks RubyGems cleanup issue
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.
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.
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
/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.
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.