Ruby関連記事:Rails is not currently installed on this systemが出て前へ進まない

ruby-top
今回ハマったのは新しいバージョンの「ruby」をインストールしたのにそれを参照しないでmacに元から入っている「ruby」を読みにいってしまう問題。

そのせいで

$ rails -v
railsのバージョンを確認しようよすると

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.

このメッセージが出る。

言われた通りに

To get the latest version, simply type:
$ sudo gem install rails

これをやっても全く変わらない。

原因はmacに元から入っている古いバージョンのrubyを読みにいってしまっているから

つまり「古いバージョンのrubyでは今回インストールしたrailsは動かないよ」ということなんですよ。

rbenvで新しいバージョンのrubyをインストールして

$ rbenv global 2.6.6

というように「全般的に2.6.6バージョンのrubyを使ってね」と設定しました。

だけど

$ ruby -v

これでrubyのバージョンを確認すると

ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17]

「2.3.7を使っている」と出る。

いったいどのrubyを参照しているのか?

$ which ruby(場所を聞く)
/usr/bin/ruby

これはmacに元から入っているrubyだよね。

新しくインストールしたrubyを使ってないために新しいrailsも使えないという事。

どうするか?

PATH(パス)

PATHは道順を教えるメモみたいなもの。

PATHがないとアプリケーションを使うのにその場所まで移動しないといけない。

実行ファイルが置いてあるディレクトリ(フォルダ)まで移動してそこでアプリケーションを実行するコマンドを打つ。

だけどPATHがあればどこにいても道順を書いたメモが見れるために移動せずにその場でアプリケーションを実行するコマンドが打てる。

macに元からあるrubyに対しては

/usr/bin/ruby

というPATHが設定してある。(「PATHが通してある」という言い方をする)

この道順を書いたメモにしたがってrubyまで辿り着いている。

$ echo $PATH

でPATHの内容が確認出来る。

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

こんな感じで「:」で区切って複数のパスが書かれている。

わかりやすく改行すると

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

こうなっていて、
あるアプケーションのコマンドを受けると上から順番に書かれた道順で探していく。
なかったら次のパス、次のパスと参照していく。

先ほどのmacに元から入っているrubyだったら二つ目(/usr/bin)で見つかったはず。

順番に見ていくので優先順位は頭からになっている。

新しくインストールしたrubyにPATHを通す

地図が古いわけだから新しくインストールしたrubyまでの新しいPATHを設定すればいいわけだ。

PATHを書き換える

PATHを書き換えるには
/Users/user(使用者)/直下のディレクトリにある.bash_profileというファイルを使う。

今回のように「新しいrubyをインストールしたのに古いrubyから切り替わらない」問題で検索するとPATHの書き換え方を教えてくれている記事がたくさん見つかる。

.bash_profileにどう書くかなんですが

export PATH="~/.rbenv/shims:$PATH"
eval "$(rbenv init -)"

この書き方が多いですね。

「export」は以下の内容で書き換えなさいということ。

$PATH←これは元から入っているパスの記述なので「元から入っているパスの先頭に~/.rbenv/shimsを付けてね」という事になります。

先頭に付けるので優先順位は一番です。

eval "$(rbenv init -)"

これは「rbenvの初期化を実行しなさい」というリクエストです。

個人的にはeval “$(rbenv init -)”をやる事でパスの先頭に~/.rbenv/shimsが付く事になるので

eval "$(rbenv init -)"

だけでいいかなと思いましjた。

パスを書き換えた結果、

自分の環境では解決しませんでした。

あいかわらずmacに元から入っているruby(/usr/bin/ruby)を読みに行ってしまいます。

PATHの確認

原因を探るためにパスの確認をしていきます。

視覚的にわかりやすいようにfinderの画像で見ていきます。

macに元から入っているrubyの場所

/usr/bin/ruby

パスを書き換えてもなぜかここを読みに行ってしまうんですよね


macに元から入っていたrails

/usr/bin/rails

railsもmacに元から入っています。


新しくインストールした.rbenvフォルダの位置

このフォルダの下にrubyがあります。
/Users/user(odakura)/.rbenv


新しくインストールしたrubyのフォルダ

/Users/user(odakura)/.rbenv/versions/2.6.6/


新しくインストールしたrubyのフォルダからruby実行ファイルまで

/Users/user(odakura)/.rbenv/versions/2.6.6/bin/ruby


新しくインストールしたrails、bundle実行ファイル。
/Users/user(odakura)/.rbenv/shims/bin/bundle


具体的なパスを書き込んでみる

こうやって見ていくと実際の新しくインストールしたruby実行ファイルまでは

/Users/user(odakura)/.rbenv/versions/2.6.6/bin/ruby

こういうパスになりますね。

これをパスに書き込んで見ました。

export PATH="/Users/odakura/.rbenv/versions/2.6.6/bin/:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/local/bin:/opt/X11/bin"
eval "$(rbenv init -)"

先頭に来るように書きました。

さあ、その結果は

見事成功!

$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin17]
$ which ruby
/Users/odakura/.rbenv/versions/2.6.6/bin/ruby

バージョンでも場所でも新しいrubyを参照しているのが確認出来ました。

このやり方が正解なのかはわかりませんが、これで

$ rails -v
Rails 5.2.3

railsがインストールされているのも確認出来て前へ進む事が出来ます。


以上「Ruby関連記事:Rails is not currently installed on this systemが出て前へ進まない」という記事でした。
気に入ってもらえたらシェアしてくれると嬉しいです。