Last-Update:2012/04/23
メッセージはこちら↓
Rails is not currently installed on this system. To get the latest version, simply type:
$ sudo gem install rails
You can then rerun your "rails" command.
で、いくらsudo gem install rails
を入力しても、railsコマンドを実行すると上記メッセージが表示されて変わらないと。
状況はといえば
非常に丁寧なこちらの解説サイトを参考に
homebrewでruby-buildとrbenvをインストールして、ruby本体はrbenvにてインストールしたものが動いている状態でした。
で、railsがいくらやっても動かないと。
ここで、一から整理しながら考えてみて、rbenvやgemの仕組みを調べてみたところ
- gemはシステム(Mac本体)ではなく、rubyが持つツールである。
- rbenvでは、rubyごとにgemを持つ。
ということ。
なので、いくらrbenvでrubyのモードを切り替えても、gem自体はシステムデフォルトのrubyのgemが使われていた様子。
さらに、rbenvでいれたrubyごとにgemを持つから、rbenvではrubyを入れる(切り替える)ごとにgemファイルが変わる模様(それを回避する方法もあるそうな。)
つまり私のドハマリした状況は
- ruby⇛rbenvのものが作動(1.9.3系)
- gem⇛MacOSXのデフォルトのruby(1.8.7系)のgemが作動
- rails⇛上記のgemでinstallされたから、デフォルトruby内のgemに配置=/usr/bin/の中のrailsが使われている
という入り組んだ状態になっていた。
調べてみると、railsは確かに/usr/bin/の中から呼ばれている。
正しく動作させるには
- gem⇛rbenvで入れたruby1.9.3系のgemを起動させるようにする
- rails⇛rbenv内のrubyの指定位置から呼ばれるようにする
ということで、.bashrcなどにPATHを記述してPATHを貼り直す(システムの優先順位を決める:/usr/bin/よりもrbenvのものを優先させる)
ここで注意点?がありまして
いろんな「rbenvを使ったruby環境構築解説記事」では、PATHの指定が以下のようになっている
export PATH="$HOME/.rbenv/bin:$PATH"
が、いくら探しても~/.rbenv/のなかに、binというフォルダはない。私が特殊なのか、仕様が変わったのかはわかりません。
しかし、かわりに「shims」という似たようなフォルダを見つけた。
どうやら、この中にいろんなシステムが入っている様子。
ということで、.bashrcに以下を追記
export PATH="$HOME/.rbenv/shims:$PATH"
その後、gem install rails
としてrailsをインストールすると…
動いた!!
まとめると
gemとはrubyそれぞれがもつツールである。しかし、rbenvをいれてもMacOSXはデフォルトでrubyとgemを持っているから、いくらgemコマンドを打ち込んでもデフォルトのrubyのgemが起動してしまう。gemコマンドが自分が使いたいrbenvのrubyで動くように、きちんとPATHを指定する必要がある。そうすれば、railsだって動く
ということです。