Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

ということです。

w7tree
インターネットがつなげた世界におけるシェア(共有)の完成形は初音ミクという文脈によってなされたと信じている。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした