Railsのタスクを実行しようとしたらlistenがないとエラーが出た
目次
概要
私のRailsのプロジェクトでは、テストの前にあるタスクを実行しています。
しかし、今回次のエラーが出てタスクの実行に失敗しました。
LoadError: Could not load the ’listen’ gem. Add gem ’listen’ to the development group of your Gemfile
このエラーの解決法を見つけたので、それをメモしておきます。
環境
- Rails 5.1
原因
そもそも私の環境では、CIとしてテストを実行中にこのエラーが発生しました。
タスクの前には、次のコマンドを実行していました。
bundle install --path vendor/bundle --without production development
bundle exec rails db:create RAILS_ENV=test
bundle exec rails db:migrate RAILS_ENV=test
これを見れば分かるように、bundle install
では、testグループのものだけをインストールしデータベースについては、RAILS_ENV=test
を必ずつけて実行しています。
実はエラーの原因は、タスクの実行時にRAILS_ENV=test
をつけていないのが原因でした。
では、なぜRAILS_ENV=test
をつけないとエラーが発生するのかというと、つけない場合、タスクの実行時にdevelopment環境のgemを読み込もうとするのですが、bundle install
でtestグループのgemしかインストールしていないため、gemを読み込めず失敗するということです。
解決方法
このような原因から、タスクの実行時にRAILS_ENV=test
をつけて実行すればエラーが発生しなくなります。
実は、この他にもbundle install
時に--without
オプションを指定しないという方法もあります。
さいごに
考えれば単純な話ですが、少しはまってしまいました。
同じ悩みをもつ人の参考になれば幸いです。