update-alternatives

Ruby Advent Calendar の記事で http://blog.udzura.jp/2009/12/13/switch-your-ruby-on-ubuntu910/というのがあった。

RVM はいいものだが、利用している環境が Ubuntu でもあるので、この方法についても試してみることにした。

ただ、冗長な書きぶりが気になったので、update-alternatives を生成する Ruby スクリプトを作成。

このスクリプトを利用すれば、rails コマンドなど新たにコマンドが増えたときにも簡単に対応できる。

  1 RUBY186 = ["/usr/local/ruby/ruby-1.8.6-p383", "", 120]
  2 RUBY187 = ["/usr/local/ruby/ruby-1.8.7-p174", "", 150]
  3 system1 = ["/usr/", "1.8", 140]
  4 system2 = ["/usr/", "1.9", 100]
  5 RUBY191 = ["/usr/local/ruby/ruby-1.9.1-p376", "", 110]
  6 
  7 commands = %w(ruby irb gem rake)
  8 
  9 [RUBY186, RUBY187, system1, system2, RUBY191].each do |dir, suffix, priority|
 10   args = commands.map do |command|
 11     link = "/usr/bin/#{command}"
 12     fullpathcmd = "#{File.join(dir, "bin", command)}#{suffix}"
 13     if command == "ruby" then
 14       "--install #{link} #{command} #{fullpathcmd} #{priority}"
 15     else
 16       "--slave #{link} ruby-#{command} #{fullpathcmd}"
 17     end
 18   end.join(" ")
 19   altcmd = "sudo update-alternatives #{args}"
 20   system altcmd
 21 end

update-alternatives は、切り替えるのに管理者権限が必要となるようだ。ユーザ権限で頻繁に利用するRuby を変更したいと思う用途にはなかなか難しいかもしれない。

update-alternatives --list によって、インストールされている Ruby を得ることができるため、その結果を利用して、インストールしているすべての Ruby で実行する all-ruby コマンドの作成なども可能となりそうだ。時間があれば取り組みたい。