【Rails】Rails6が起動できないので今更Rails5を構築した
Rails6を使おうとしたら、尽くError: uninitialized constant URI::Genericというエラーが出て、Rails new も rails s も動かなかったので、諦めてRails5に環境を戻しました。(細かい理由は後書きに記載します。)
1. 初めにrubyのバージョンを落とす(任意?)
過去に使っていたプロジェクトにメモしてあったRubyのバージョンに一応戻しました。
(目的に合わせて下の二行目の local は global にしてください)
$ rbenv install 2.3.1
$ rbenv local 2.3.1
2. bundler, nokogiri, sprocketsを予めインストール
バージョンは2016年ごろのものにしています。(2019年以降のものだと対応してるか怪しかったため)
$ gem install bundler -v1.13.0
$ gem install nokogiri -v1.6.8
$ gem install sprockets -v3.7.2
3. rails5 をインストールします
今回はRails5.1.6をインストールします。(既に最新のRailsをインストールしている方は、一旦それを削除してRails5を入れると安心です)
$ gem install rails:5.1.6
以上です。これで後はrails new なり何なりします。
多分初めからRails5 を入れる場合は、他にも対応してないgemが出てくると思うので、その都度前バージョンのgemを入れてください。
後書き
Rails6の起動時のエラー「Error: uninitialized constant URI::Generic」がについては色々調べて試してみたのですが、尽く全てダメでした。一つこちらの記事にMacOSを新しくしたらできたとあったので、もしかすると私のMacOSが古かったのが原因なのかもしれませんね?(MacBookPro13-inch, Mid 2012 / MacOS10.15.7 Catalina)
「2. bundler, nokogiri, sprocketsを予めインストール」を行った理由ですが、先にRails5をインストールしようとすると、下記のようなエラーに遭遇します。
ERROR: Error installing rails:
sprockets requires Ruby version >= 2.5.0.
多分、Railsに必要なgemの指定にバージョンが記載されていないのだと思います。
なので、最新のnokogiriやsprocketsをインストールしようとして、Rubyのバージョンとの互換性が取れなくなってしまうのでしょう。
仕方がないので、バージョンの古い(というかRails5が現役であったであろう期間・もしくはrubyの指定バージョンの時期)bundler, nokogiriやsprocketsを事前にインストールしてあげました。
これで問題なく動くはずです。
OSのバージョンでダメなんてことがあるのでしょうか…
そろそろRails卒業してDjangoとかに乗り換えようかなぁ…
参考サイト
- rubygems.org : 各ジェム(nokogiri, sprokets等)のバージョン履歴が見れます。
- https://rubygems.org/gems/nokogiri/versions:nokogiriの全バージョン履歴
- https://rubygems.org/gems/sprockets/versions:sprocketsの全バージョン履歴
- https://rubygems.org/gems/bundler/versions:bundlerの全バージョン履歴