メモ: なぜローカルgemをインストールする前に.ruby-versionを消すのか
今日、上の記事があって助かったのだけど、手順の一部の意味がわからなかったのでメモ。記事から手順を引用する。
git clone git://github.com/berkshelf/berkshelf cd berkshelf rm .ruby-version gem build berkshelf.gemspec gem install berkshelf-3.0.0.beta4.gem rbenv rehash
前提知識
OSは、RubyやRubyを使うツールを実行する際に、PATHの先頭に記述されたディレクトリから順にrubyを探す。rbenvは、PATHの先頭に小細工をして、システムにインストールされたRubyと異なるバージョンのRubyを参照するように仕向ける。
rbenvは、使用するRubyのバージョンを次のように決める。
- 環境変数RBENV_VERSIONが定義されていれば使う
- 実行したスクリプトが存在するディレクトリから親ディレクトリに遡り、ファイルシステムのルートに至るまでに最初に見つけた.ruby-versionファイルの設定。
- カレントディレクトリから親ディレクトリに遡り、ファイルシステムのルートに至るまでに最初に見つけた.ruby-versionファイルの設定。なおカレントディレクトリの.ruby-versionの設定は、rbenv localコマンドで上書きできる
- ~/.rbenv/versionの設定。なおこの設定はrbenv globalコマンドで上書きできる。globalバージョンのファイルがなければ、rbenvはシステムにインストールされたRubyを使おうとしているとみなす。
rbenv rehashは、すべての実行可能なRubyに対して、PATH先頭の小細工を (rbenvのドキュメントの言葉にしたがうとshimを) 改めて挿入する。そのため、新しいバージョンのRubyをインストールした場合や、コマンドが提供されるようなgemをインストールした場合(つまり、実行にあたってPATHをたどって実行される場合)、rbenv rehashする必要がある。