Ruby and Gems from Homebrew on Mac OSX
2011-06-15Hey, so I bought a Macbook Air a month ago, and I've grown to absolutely adore it. It basically comes down to that I have an OS that I don't need to fix constantly, while also having access to all of the utilities I'm used to using on my Linux/UNIX environments.
I use Homebrew to manage my software, because it seems to be the best package management solution for OS X. I haven't really tried any others, but I have no inclination to after using Homebrew for the past few months.
Oh and I also learned Ruby. And I kind of like it so far.
Regardless, this post isn't about my Ruby experience thus far. It's just documenting a minor annoyance. When I install gems using ruby1.9 from Homebrew, the gems don't make a symlink in /usr/local, and the internet tells me the right thing to do is to make it myself.
Well fuck that.
Here's a brief ruby program that will insert these links for you! I'm not claiming to be a Ruby expert, or even competent, so run this at your own risk. It can get a little destructive, and makes some assumptions.
#!/usr/bin/env ruby require 'RubyGems' installed_gems = [] prefix = '/usr/local/bin/' ruby = '/usr/local/Cellar/ruby' Gem::Specification::all_names().reverse.each do |gem| (name, version) = ['', ''] gem.match(/([\w\-]+)\-([\w\.]+)/) do |m| name = m.captures[0] version = m.captures[1] end Gem::Specification.new do |s| s.name = name s.version = version installed_gems.push(s) end installed_gems.delete_if do |i| name == i.name and Gem::Version.new(version) > Gem::Version.new(i.version) end end installed_gems.each do |gem| if File.directory? gem.bin_dir then Dir.entries(gem.bin_dir).each do |file| fullpath = gem.bin_dir + '/' + file newpath = prefix + file if not File.directory? fullpath then if File.symlink? newpath then if File.readlink(newpath).match %r{/usr/local/Cellar/ruby} then puts "Linking #{fullpath} to #{newpath}..." File.unlink newpath File.symlink fullpath, newpath end end end end end end
Hope that helps.