Ruby
Rails
SQLite3
cloud9

rails generateする時sqlite3の指定で躓いた話


環境


  • cloud9

  • Rails 5.2.2


controllerをgenerateしたかった

controlleを作ろうとrails generate。

$ rails generate controller search books

いやー、railsはこれがあるから良いですねー。

昔やってたStrutsなんて用意するファイルを全部手で作ってたから効率がぜんぜん違うわー。

さてさて、ズラズラっと出てきたから出来てー…

/usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/gems/2.4.0/gems/bundler-1.16.5/lib/bundler/rubygems_integration.rb:408:in `block (2 levels) in replace_gem': Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0. Make sure all dependencies are added to Gemfile. (LoadError)

  :
 (以下スタックトレース)
  :

ないじゃん。

おもくそエラーじゃん。


答えはエラーに書いてある

ちゃんとしたフレームワークならちゃんとしたエラー文が出力されるので、まずはエラー文を眺めてみましょう。

すると、最後にこんな記載があるわけですな。

Make sure all dependencies are added to Gemfile.

英語が得意とは言えない人(=ぼく)でも「dependencies」を「Gemfile」でなんかしなきゃいけないことはなんとなーくわかりますね。

じゃあその直前に何が書いてあるかというと、

Missing a gem it depends on? can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0.

ざっくり和訳すると、「Genfileのsqlite3周りちゃんと見ろ」

わざわざバージョン指定まで入ってるので、Gemfileにコピペしときましょう。

現在のsqlite3をコメントアウトして、その下にコピってペーします。


gemfile

# Use sqlite3 as the database for Active Record

# gem 'sqlite3'
gem 'sqlite3', '~> 1.3.6'

保存したのを確認して、rails generateを再実行。

$ rails generate controller search books

Running via Spring preloader in process 12947
create app/controllers/search_controller.rb
route get 'search/books'
invoke erb
create app/views/search
create app/views/search/books.html.erb
invoke test_unit
create test/controllers/search_controller_test.rb
invoke helper
create app/helpers/search_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/search.coffee
invoke scss

今度はちゃんと動きました。めでたしめでたし。


参考資料

railsでおこったエラーについて