APIモードがありますRails 5アプリでrake routes
またはRails s
を実行できません。表示されるエラーは次のとおりです。
$ rake routes
rake aborted!
LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile
.../config/environment.rb:5:in `<top (required)>'
LoadError: cannot load such file -- listen
.../config/environment.rb:5:in `<top (required)>'
Tasks: TOP => routes => environment
(See full trace by running task with --trace)
listen
がGemfileの開発グループにあることを確認しました。
group :development do
gem 'listen', '~> 3.1.5'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/Rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
そして、それが私のGemfile.lockにあること:
$ cat Gemfile.lock | grep 'listen'
listen (3.1.5)
spring-watcher-listen (2.0.0)
listen (>= 2.7, < 4.0)
listen (~> 3.1.5)
spring-watcher-listen (~> 2.0.0)
バンドルを更新し、バンドルをインストールし、gem install listen
が機能することを確認しました。これは今週初めに機能していましたが、コミットを元に戻すことができません。
$ Ruby -v
Ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
vendor/cache
には表示されませんが、どうすればよいかわかりません...
$ bundle package | grep 'listen'
ヘルプに感謝します!
更新:
グローバルなGemfileにgem 'listen', '~> 3.1.5'
を配置(および:development
から削除)することで、問題を「修正」できます。その後、すべてのエラーがなくなり、すべてが機能しますが、それは間違っているようです。
これを回答として投稿していますが、好きではありません。
グローバルなGemfileにgem 'listen', '~> 3.1.5'
を配置(および:development
から削除)することで、問題を「修正」できます。その後、すべてのエラーがなくなり、すべてが機能しますが、それは間違っているようです。
Rails 5であり、デフォルトのconfig/environments/development.rbファイルを使用している場合、このコード行がそこにあります。
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
これには、gem listenが必要です。 Rails 4へのアップグレードをRails 5
編集:そのコード行をコメントアウトする場合、listen gemはもう必要ないことを言及するのを忘れました。
間違ってbundle install --without
を設定した可能性がありますが、とにかく設定しました。
この実行を元に戻すには:
bundle config --delete without
誤ってwith
オプションも手動で設定したため、bundle config --delete with
も実行しました。両方を実行すると、デフォルトの動作に戻るはずです。
without
configを削除した後、bundle install
を再び正常に実行でき、その後Rails s
、Rails db:migrate
などが機能しました。
これが問題かどうかを確認するには、bundle install
を実行して、出力の最後から2行目を見てください。状態の場合:
Gems in the groups development and test were not installed.
上記のソリューションが確実に機能するはずです。
私はこれを使用しました:bundle install --without development
エラー:
「listen」gemをロードできませんでした。追加
gem 'listen'
Gemfileの開発グループ(LoadError)
この後、そのコードを使用します。
bundle config --delete without
bundle config --delete with
最後に
bundle install
今日Rails 5.1.5から5.2.0にアップグレードした後、同様の問題が発生しました。サーバーを初めて実行すると、次の「資産が見つかりません」という問題がありました。
ActionView::Template::Error (The asset "asterisk_orange.png" is not present in the asset pipeline.)
アセットをプリコンパイルしようとすると、「gem listenエラー」が表示されます。
$ bundle exec rake assets:precompile
rake aborted!
LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile
私の解決策は、本番環境を明示的に設定することでした:
$ Rails_ENV=production bundle exec rake assets:precompile
これにより、問題のない資産がプリコンパイルされ、「資産の欠落」問題が修正されました。
Rails c
を実行しても同じ問題が発生します。
この他のStack Overflow post を読むことで、bundle exec rake
コマンドまたはRails console
の両方がデフォルトのproduction
環境で実行されているのが正常であることがわかりました。
私は次のいずれかで問題を解決すると考えました:
export Rails_ENV=production
を追加bundle exec rake a_rake:task Rails_ENV=production
Rails console --env=production
などのようにコマンドを実行する環境を明示的に記述します...同じ問題がありました。 @newdark answerのおかげで、正しい解決策を見つけました。基本的に、Rails in production
モードでデプロイしたかったのですが、サーバーを実行する前に環境変数Rails_ENV=production
を設定するのを忘れていました。
要約すると、production
モードの依存関係がインストールされましたが、Rails= Rails_ENV=production
の設定を忘れたためにdevelopment
モードで起動しようとしました。 gem listen
をproduction
依存関係に追加するには、気付かずに開発モードで実行します。
私にとっての解決策は、任意のRailsコマンドを実行する前にexport Rails_ENV=production
を実行し、依存関係をそのままにしておくことでした。
私は同じ問題を抱えていたので、実行して修正しました
Rails c -e production
mongoid database file
を生成しようとしたときに同じエラーが発生しました。
Rails new project
にRuby 2.5.1
を作成しました。 Ruby
は2.2
です。したがって、私の状況では因果関係が異なる可能性があります。
Rails new project
を使用したとき、バージョン5.2で作成された後、gemを5.1.2に変更すると問題が発生します。 GemfileでRails _5.1.6_ new
を使用して作成すると、開発用の追加パックが生成されます。
group :development do
# Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/Rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
このようにして、「listen」は自動的にgemfileに表示されました