RVMは自分のユーザー環境に、独自のRuby環境を作ることができる。homebrewのように、/usr/localですらない。/home/takuya/.rvmに、バージョンが違うRubyを大量に飼育できるのです。
RVMを使えば、opensslなどの依存モジュールもRVM側だけで管理できる。
つまり、homebrew に頼らなくてもRVMさえあればRubyの環境を維持管理することが出来る
rvmさえあれば、rubyで困ることが減る。
ruby 1.9の罠。
ruby のビルドの違いの罠
gemsの罠
gemsのバージョン地獄
gems関連はbundler で解決!!、Rubyそのものは、RVMでそこそこ解決する。
rvmを使ってるよ!っていう人は
あたりを読むと嬉しい気分になれると思います。
RVMのインストール
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
. ~/.bash_profile
これで自分のユーザー環境にRVMの準備ができる
依存パッケージのインストール
RVMでインストール出来るビルドパッケージを調べる。
takuya@air:~$ rvm pkg list
Usage:
'rvm pkg {install,uninstall} {readline,iconv,curl,openssl,zlib,autoconf,ncurses,pkgconfig,gettext,glib,mono,llvm,libxml2,libxslt,libyaml}'
'ree_dependencies' installs zlib, ncurses, readline, openssl and iconv in this order.
still need to add ' --with-readline-dir=$rvm_usr_path --with-iconv-dir=$rvm_usr_path --with-zlib-dir=$rvm_usr_path --with-openssl-dir=$rvm_usr_path' to 'rvm install ree’
以上が、rvmがインストール出来るパッケージ。Rubyのインストールに必要なパッケージはRVMが提供してくれる。便利。
まとめて入れるよ。
rvm pkg install readline
rvm pkg install iconv
rvm pkg install openssl
#…etc
って、逐次書くのものめんどくさいわ。
まとめて、ループ処理しよう
for i in autoconf readline openssl iconv zlib libxml2 libxslt libyaml ;do rvm pkg install $i ; done;#これでOK
依存パッケージを使ったRubyのインストール
じゃぁ、早速、いままでの依存モジュールを使ってRuby1.9を入れてみようか。
rvm install ruby-1.9.3 \
--with-libyaml-dir=$rvm_path/usr \
--with-libxml2-dir=$rvm_path/usr \
--with-libxslt-dir=$rvm_path/usr \
--with-readline-dir=$rvm_path/usr \
--with-iconv-dir=$rvm_path/usr \
--with-zlib-dir=$rvm_path/usr \
--with-openssl-dir=$rvm_path/usr
読みやすく改行入れてるから、一行で書いたものがこれ。
rvm install ruby-1.9.3 --with-libyaml-dir=$rvm_path/usr --with-libxml2-dir=$rvm_path/usr --with-libxslt-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr --with-iconv-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr
このように使う。*1
RVMを使ったRuby切り替え
rvmを使って、一時的にRubyを切り替えることが出来る。
rvm use system #OS標準を使う
rvm use ruby-1.8
rvm use ruby-1.9.3
rvm use ruby-head
これで、いまのシェルは、rvm指定したRubyになる。
指定したRubyをデフォルトにするには
--defaultをつけると、指定したRubyが既定になる。
rvm use system --default #システムを標準で使う
RVMにインストール済みのRubyの一覧は
rvm list で、インストール済みで、使用可能な、Rubyの一覧が見られる。
takuya@air:~$ rvm list
rvm rubies
jruby-1.6.4 [ x86_64 ]
macruby-0.10 [ x86_64 ]
=> ruby-1.8.7-p352 [ i686 ]
ruby-1.9.3-rc1 [ x86_64 ]
RVMでインストール可能なRubyの一覧は
rvm list knownでインストール可能なRubyの一覧が取得できる
takuya@air:~$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p352]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-p180
[ruby-]1.9.2[-p290]
[ruby-]1.9.2-head
[ruby-]1.9.3-preview1
[ruby-]1.9.3[-rc1]
[ruby-]1.9.3-head
ruby-head
# GoRuby
goruby
# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby-1.6.1
jruby-1.6.2
jruby-1.6.3
jruby[-1.6.4]
jruby-head
# Rubinius
rbx-1.0.1
rbx-1.1.1
rbx-1.2.3
rbx-1.2.4
rbx[-head]
rbx-2.0.0pre
# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2011.03]
ree-1.8.6-head
ree-1.8.7-head
# Kiji
kiji
# MagLev
maglev[-26852]
maglev-head
# Mac OS X Snow Leopard Only
macruby[-0.10]
macruby-nightly
macruby-head
# IronRuby -- Not implemented yet.
ironruby-0.9.3
ironruby-1.0-rc2
ironruby-head
いっぱいあって困るね。
RVMでインストール可能なRuby一覧を更新する
rvm get
たとえば安定版を追いかけるなら
rvm get stable
最新版を追いかけるなら
rvm get latest
RVMのコマンド補完
.bashrcに次を付加する。すると rvmコマンドが補完される。
takuya@air:~/Desktop$ rvm <TAB><TAB>
debug gemset jruby-1.6.4 package ruby srcdir use
default help list rake ruby-1.8.7-p352 system version
fetch implode macruby-0.10 reload ruby-1.9.3-rc1 tests
gem info monitor remove snapshot uninstall
gemdir install notes reset specs update
***.bashrcに追加するもの以下。
>||
[[ -r $rvm_path/scripts/completion ]] && . $rvm_path/scripts/completion
1.8と1.9をもっと手軽に切り分けたい。
1.9系だけでも複数入れてたりすると面倒なので、1.9という名前だけでアクセスしたい
takuya@air:~$ rvm use 1.9
WARN: ruby ruby-1.9 is not installed.
To install do: 'rvm install ruby-1.9'
などとなって不便です。
解決策Aliasを使う
takuya@air:~$ rvm alias create 1.9 ruby-1.9.3-rc1
Creating alias 1.9 for ruby-1.9.3-rc1.
Recording alias 1.9 for ruby-1.9.3-rc1.
1.9とかいたら 1.9.3を指すように指定しました。
takuya@air:~$ rvm use 1.9
Using /Users/takuya/.rvm/gems/ruby-1.9.3-rc1
takuya@air:~$
ね、簡単でしょ
もしreadline が有効にならず、homebrewのreadlineを使うなら、
僕の場合、rvm管理下のreadlineだとうまくいかなった。Macだから?とりあえず、homebrewのreadlineを使ってごまかしてる。
システムデフォルトを使う必要があるときは
RVMで入れたRubyを使用せずにシステムで入れたRubyを使うには,
rvm system
これで標準のRubyが使える