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 コマンドの作成なども可能となりそうだ。時間があれば取り組みたい。