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入門」の著者である伊藤さんのツイッターアンケートによると、使っていない人が多いみたい🧐
突然ですが、Rubyプログラマのみなさんにアンケート!rbenv-communal-gemsって使ってますか?
— Junichi Ito (伊藤淳一) (@jnchito) 2019年9月23日
【2018年版】macにrbenvを入れてrubyを管理できるようにしちゃう - Qiita
上記記事のコメント欄にもあるように、「絶対使わなきゃいけない!」という感じでもなさそう。
参考
同じく、いろんな先人たちがハマっているようです。それぞれ解決方法は違いますが、以下の記事を読めば似たようなエラーは解決できるはず。