1. makoto_kw

    No comment

    makoto_kw
Changes in title
-rbenvでバージョンを指定する方法
+rbenvでRubyのバージョンを指定する方法
Changes in body
Source | HTML | Preview

rvmからrbenvに切り替えてみたのでrbenvがどういう方法でバージョンを指定できるのか確認してみた。基本rvmからrbenvに切り替えてみたのでrbenvがどういう方法でRubyバージョンを指定したり、状況によって切り替えることができるのか確認してみた。基本https://github.com/sstephenson/rbenv/ の要約および動作確認、バージョンは0.4.0。

shims

~/.rbenv/shimsにあるスクリプトが使うコマンド(irb, gem, rake, rails, rubyなど)を振り分けてくれるっぽい。shimsが振り分けた先を知るにはrbenv whichを使う。

$ rbenv which ruby
~/.rbenv/versions/1.9.3-p392/bin/ruby

bundleなどgemでインストールして新しいコマンドが増える場合は~/.rbenv/shimsに振り分けるスクリプトを置かないといけないのでrbenv reashを唱える必要がある。

RBENV_VERSION

ドキュメントによるとRBENV_VERSION環境変数が使うバージョンを決める。従ってコマンドラインからだと以下で切り替えられる。

$ export RBENV_VERSION=1.9.3-p392
$ ruby -v
ruby 1.9.3p392 ...

global/local/shell

実際のところRBENV_VERSIONは直接意識しなくてもいいようになっている。

使うデフォルトのバージョンを固定したい場合はglobalを使う。すると ~/.rbenv/version に使うバージョンが書き込まれる。

$ rbenv global 1.9.3-p392

プロジェクトで特定のバージョンを使いたいときは、localを使う。すると、カレントディレクトリの .ruby-version に使うバージョンが書き込まれる。

$ rbenv local 1.8.7-p371

コマンドラインから一時的に切り替えたい場合はshellを使う。すると、環境変数 RBENV_VERSION に設定される。

$ rbenv shell 2.0.0-p0

localおよびshellに指定したバージョンは--unsetオプションにより取り消せる(globalは取り消せなかった、後述のsystemに戻すことで代用できる)。なおlocalの場合は .ruby-version ファイルが削除される。

$ rbenv local --unset
$ rbenv shell --unset

念のため実験したところ優先順位はちゃんとshell > local > globalの順で適応された。

system

ディストリビューションなどで例えば/usr/bin/rubyにRubyがインストールされていることがある。こういったRubyはsystemというキーワードで指定することができる。

$ rbenv shell system
$ rbenv local system
$ rbenv global system

rbenv global --unsetの代わりとしてrbenv global systemが利用できる。

古い.rbenv-version

互換性のために.rbenv-versionから.ruby-versionを使うようになっている。

  • .rbenv-versionと.ruby-versionの両方が存在する場合
    • .ruby-versionが優先される
    • rbenv local使った場合は.ruby-versionのみ更新される
    • rbenv local --unset使った場合は.ruby-versionも.rbenv-versoinも削除される
  • .rbenv-versionだけがある場合
    • rbenv localを実行すると.rbenv-versionが削除され.ruby-versionが作成される。
    • rbenv local --unset使った場合は.rbenv-versoinが削除される。