RVMは自分のユーザー環境に、独自のRuby環境を作ることができる。homebrewのように、/usr/localですらない。/home/takuya/.rvmに、バージョンが違うRubyを大量に飼育できるのです。
RVMを使えば、opensslなどの依存モジュールもRVM側だけで管理できる。
つまり、homebrew に頼らなくてもRVMさえあればRubyの環境を維持管理することが出来る
rvmさえあれば、rubyで困ることが減る。
rubyでハマる色々な罠
ruby 1.9の罠。
ruby のビルドの違いの罠
gemsの罠
gemsのバージョン地獄
gems関連はbundler で解決!!、Rubyそのものは、RVMでそこそこ解決する。
rvmを使ってるよ!っていう人は
- rvm alias機能
- 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になる。
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のコマンド補完
.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を使ってごまかしてる。
homebrew のライブラリヘッダーのパスを追加しておく。
rvm install 1.8.7 -C "--enable-shared --with-readline-dir=`brew --prefix` rvm use 1.8.7
→参考そのものズバリなエントリを発見 RVMを用いてreadlineオプションを指定する - kdkk0 の 日記
Macって意外とビルド地獄なんですね。
Linux良く出来てるんだわ・・・
*1:#with-xxx-dir は適当につけけたので。間違ってるかも・・