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オプションを指定しないという方法もあります。

さいごに

考えれば単純な話ですが、少しはまってしまいました。

同じ悩みをもつ人の参考になれば幸いです。