Railsのコントローラーが作れない!??
どうも、Linです。空気、読みましたね。
先日、プロゲートのRuby on Rails5コースを終了し、いよいよローカル環境でRailsアプリを作成し始めました。

しかしながら、基本中の基本である、
コントローラーを作成する
というフェーズで躓いてしまったのです。
もうね、作れない、何度やっても。
searchというコントローラーを作成するために
$rails g controller search
というコマンドを打ってみたんですが、次のようなエラーが発生してしまいました。
Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem 'sqlite3' to your Gemfile (and ensure its version is at the minimum required by ActiveRecord). (Gem::LoadError)
Add gem ‘sqlite3’ to your Gemfile
(Gemfileにsqlite3を加えろ!)
と書いてあったので、Gemfileを確認してみたところ、すでにこの記述は存在しているっ!!
どういうことなんだと頭を抱えることになりました。
同じエラーでつまづいている仲間がいないかググってみたところ、こちらのteratailのページに遭遇。
gem ‘sqlite3’, ‘~> 1.3.6’に変えるとうまく動作すると思います。
というアンサーがベストに選ばれていたので、試してみたんですが、今度は次のようなエラーが出てしまいました。
Bundler could not find compatible versions for gem "bundler": In Gemfile: rails (= 4.2.6) was resolved to 4.2.6, which depends on bundler (< 2.0, >= 1.3.0) Current Bundler version: bundler (2.0.1) This Gemfile requires a different version of Bundler. Perhaps you need to update Bundler by running gem install bundler? Could not find gem 'bundler (< 2.0, >= 1.3.0)', which is required by gem 'rails (= 4.2.6)', in any of the sources.
事態は良くなるどころかむしろ悪化。
これではアプリ開発どころではないので、今度は自分がteratailで質問してみることにしました笑
teratailで質問して助けを求めた
teratailで質問してみたところ、半日後ぐらいに1件の回答が届きました。
手元の bundler のバージョンが新しすぎるようですね。
gem install bundler を実行して古いものを入れるか、いっそ最新の Rails 5 を使用するのをお勧めします。
個人的には、これから新規でアプリを作成するのでしたら古い Rails 4 を使う理由はあまりないと思います(そろそろ Rails 6 も出ますし)。
なっ、なるほど・・・・
Rails初心者のぼくは古いbundlerとか入れられそうになかったので、いっそ新しいRails5にバージョンアップすることにしました。
っというか、Rails6になろうとしてるんですね・・・・笑
冒頭にも書きましたがぼくが利用していたRailsのバージョンは4。
TECH::CAMPで勉強したのがRails4だったことと、まだまだネットの情報がRails4のものが多かったのでRails5へバージョンアップしてなかったのです。
しかしながら、そのRails4に限界がきたのですね、うん。
Add gem ‘sqlite3’というエラーの解決策
ということで、早速Railsのバージョンを4から5にアップすることに。
こちらのプロゲートのページを参考にしながらRail5にアップデートしてみました。
具体的にいうと、
$ gem install rails -v 5.0.3
というコマンドでRails5にバージョンアップし、さらにGemfile中の
gem 'sqlite3'
を
gem 'sqlite3', '~> 1.3.6'
にして
$bundle update
でGemfileの変更内容を反映させます。
動作後に再びRailsアプリでcontrollerを作成してみたところ、コントローラーが無事に作れちゃったんです。
きたあ、コントローラー。これだよ、これ。
teratailで回答してくれたエンジニアさんありがとうございました。
このように、ググってもググっても解決できないエラーというものは存在していて、むしゃくしゃするときがあるでしょう。
そういう時は1人で抱え込まずteratailに質問を投稿してみるのもありですね。
それでは!
Lin