1. Qiita
  2. 投稿
  3. Ruby

MacOSX-Lionでrbenvを使ってRubyOnRailsの環境構築すると、以下のようなメッセージが出てドハマリしたけど、なんとか解決したことについてのメモ(推理なので正しいかどうかの確証持てない)

  • 127
    いいね
  • 4
    コメント
この記事は最終更新日から1年以上が経過しています。

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だって動く

ということです。