rvm の設定あれこれ
今までは、Ruby を野良ビルドしてコマンド名を変えて使い分けていた。
これをやめて rvm を使ってみる。
rvm とは
様々なバージョン、実装の Ruby をインストールして必要に応じて使い分けるためのシステム。
gem でもインストールできるらしいが、Ruby が先か gem が先か混乱するので、以下の記事を参考に git でインストール。
$ rvm install 1.9.2 -C "--enable-shared --enable-pthread --with-opt-dir=/opt/local" $ rvm install 1.8.7 -C "--enable-shared --enable-pthread --with-opt-dir=/opt/local" $ rvm install ruby-head -C "--enable-shared --enable-pthread --with-opt-dir=/opt/local" $ rvm install jruby $ rvm install macruby $ rvm install rbx
調子にのっていっぱいインストールした。
デフォルトを指定しておく。これがログイン時に使える Ruby になる。
$ rvm use 1.9.2 --default
gem
gem はインストールした各 Ruby ごとにインストールする必要がある。
$ gem install rcodetools $ rvm use 1.8.7 $ gem install rcodetools $ rvm use jruby $ gem install rcodetools $ rvm use rbx $ gem install rcodetools ...
めんどい。
shebang
これまでは 1.9.2 をハードコーディングしていた。
#! /usr/local/bin/ruby19 # -*- coding: utf-8; -*- ...
せっかく rvm で Ruby を切り替えられるので、これからは env を使うことにする。
#! /usr/bin/env ruby # -*- coding: utf-8; -*- ...
rcodetools
上記のパスを変更してやれば使えそう。
(defvar rvm-rubies '("ruby-1.9.2-p180" "ruby-1.8.7-p334" "ruby-head" "jruby-1.6.0" "macruby-0.9" "rbx-head")) (defvar rvm-path-regex "\\(/\\.rvm/[^/]+/\\)\\([^/@]+\\)") (defun rvm-path (ruby src-path) (let ((new-path nil)) (mapcar '(lambda (path) (setq new-path (cons (replace-regexp-in-string rvm-path-regex (concat "\\1" ruby) path) new-path))) src-path) (reverse new-path))) (defun rvm-use (&optional ruby) "rvm use" (interactive) (or ruby (setq ruby (completing-read "rubies: " rvm-rubies nil t))) (setq exec-path (rvm-path ruby exec-path)) (setenv "PATH" (mapconcat 'identity exec-path ":")) (setenv "GEM_HOME" (car (rvm-path ruby (list (or (getenv "GEM_HOME") ""))))) (setenv "GEM_PATH" (mapconcat 'identity (rvm-path ruby (split-string (or (getenv "GEM_PATH") "") ":")) ":"))) (provide 'rvm)
- まずはデフォルト ruby-1.9.2
RUBY_VERSION # => "1.9.2" RUBY_PLATFORM # => "x86_64-darwin10.7.1" RUBY_DESCRIPTION # => "ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.1]"
M-x rvm-use すると、どの Ruby を使うのか聞いてくる。
rubies: ruby-1.8.7-p334
上記 rvm-rubies の中から補完できる。
- ruby-1.8.7
RUBY_VERSION # => "1.8.7" RUBY_PLATFORM # => "i686-darwin10.7.1" RUBY_DESCRIPTION # => "ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10.7.1]"
RUBY_VERSION # => "1.8.7" RUBY_PLATFORM # => "java" RUBY_DESCRIPTION # => "jruby 1.6.0 (ruby 1.8.7 patchlevel 330) (2011-03-15 f3b6154) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_24) [darwin-x86_64-java]"
- rubinius
RUBY_VERSION # => "1.8.7" RUBY_PLATFORM # => "x86_64-apple-darwin10.7.1" RUBY_DESCRIPTION # => "rubinius 1.2.4dev (1.8.7 6516032f yyyy-mm-dd JI) [x86_64-apple-darwin10.7.1]" # >> "1.8.7"
なぜか勝手に puts RUBY_VERSION もしてくれるw
- ruby-head
RUBY_VERSION # => "1.9.3" RUBY_PLATFORM # => "x86_64-darwin10.7.1" RUBY_DESCRIPTION # => "ruby 1.9.3dev (2011-03-21 trunk 31140) [x86_64-darwin10.7.1]"
No such file or directory -- xmpfilter (LoadError)
動かなかった orz