Just do IT

思うは招く

Rails is not currently installed on this system エラーを解決

6時間くらいハマってエラい目にあったので、メモとして残します😅

環境

$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.14.6

$ rbenv -v
rbenv 1.1.2

問題

rails newをしても以下のエラーが出る。

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.

rails -vをしても同様のエラーメッセージが表示される。

うまくいかなかった解決方法

まず、sudo gem install railsをしてみたが解決せず。

次に、rails がどのパスから呼ばれているのか確かめた。

$ which rails
/usr/bin/rails

このように、システム(Mac本体)から呼ばれている。 では、Ruby はどこから呼ばれているか?

$ which ruby
/Users/kotakanazawa/.rbenv/shims/ruby

rbenv から呼ばれている。

ならば、rails も rbenv から呼ばれていないとおかしい。.bash_profileを確認してみる。

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

このように、パスの設定はできている。しかし、.bash_profileを再読み込みしても問題は解決しない。

$ source ~/.bash_profile

呼び出しのパスも変わらない・・・。

$ which rails
/usr/bin/rails

む〜困った😇

原因

rbenv のプラグイン「rbenv-communal-gems」が原因だった可能性が高い。

tpope/rbenv-communal-gems: Share gems across multiple rbenv Ruby installs

rbenv-communal-gems をアンインストールするとrails newができるようになったので、このプラグインが要因だったと考えられる。(もしかしたら他の場所に要因が隠れているのかもしれないが…)

解決

  • 以下をアンインストール
    • rbenv-communal-gems
    • rbenv
    • rbenv でインストールした Ruby のバージョンすべて
  • rbenv を再度インストールし、設定し直した

上記の手順を踏むことで解決できた。

rbenv に関わるものをアンインストール

以下のように、rbenv に関わるものをアンインストールした。

$ brew uninstall rbenv-communal-gems
$ rbenv uninstall 2.6.5 #他にもバージョンがあればすべてアンインストールする
$ brew uninstall rbenv
$ brew uninstall ruby-build

念の為、ターミナルも一旦再起動する。

rbenv をインストール

次に、rbenv をインストールした。

$ brew install rbenv

これをすると ruby-build もインストールされたので、別途 ruby-build だけをインストールする必要はない。

# 使いたいバージョンをインストールする
$ rbenv install 2.6.5
$ rbenv install 2.7.0
$ rbenv install 2.7.1

パスの設定も忘れずに。

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

Railsをインストール。

# 2.6.5をシステムのバージョンに設定する
$ rbenv global 2.6.5

# railsをインストール
$ gem i rails

※ bundler は Ruby 2.5 から Ruby 本体に組み込まれたので別途インストールする必要はない。

パスを確認してみる。

$ which rails
/Users/kotakanazawa/.rbenv/shims/rails

システムではなく、rbenv から呼ばれるようになった。

$ rails -v
Rails 6.0.3.2

問題が解決した😁

他の問題も解決

ちなみに、「rails newができない」以外にも問題が起きていた。

何が起きていたのかというと、システムの Ruby バージョンを 2.7.1 にして、irbを起動するとなぜか2.7.0を呼んで起動しなかった。incompatible library versionエラーが出ていた。

しかし、今回の対処法でこれも解決した。

なぜ rbenv-communal-gems を使っていたのか?

そもそも、なぜこのプラグインを入れたのかというと、スーパー初心者の頃に検索上位にあった記事を読んだから。あまり深く考えずに入れてしまっていた…😅

rbenv-communal-gems は何をするプラグインか?

Ruby の各バージョンで使う gem を共有化してくれるもの。rbenv は Ruby のバージョンを簡単に管理してくれるが、各バージョンごとに gem を用意しなければならない面倒さがある。

それを解決するため、各バージョン間でgemを共有してくれる rbenv-communal-gems なのだが、リポジトリを見る通り開発は止まっている。

感想

たしかに、各バージョンで gem を用意するのは面倒だが、今のところそんなに労力を感じていない。開発も止まっているようだし、今後はこのプラグインは使用しないことにする。(もし開発が進んでいたとしても必要ないと思う)

「プロを目指す人のためのRuby入門」の著者である伊藤さんのツイッターアンケートによると、使っていない人が多いみたい🧐

【2018年版】macにrbenvを入れてrubyを管理できるようにしちゃう - Qiita

上記記事のコメント欄にもあるように、「絶対使わなきゃいけない!」という感じでもなさそう。

参考

同じく、いろんな先人たちがハマっているようです。それぞれ解決方法は違いますが、以下の記事を読めば似たようなエラーは解決できるはず。