LoadError: ne pouvait pas charger Le Gemme "listen" (Rails 5)

j'ai une application API mode Rails 5 qui ne me permet pas de lancer rake routes ou rails s . L'erreur que j'obtiens est:

$ 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)

j'ai vérifié que listen est dans le groupe de développement dans mon 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

et que c'est dans ma Gemfile.serrure:

$ 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)

j'ai mis à jour le paquet, et l'ai installé, et vérifié que gem install listen fonctionne. C'était plus tôt cette semaine, mais je ne suis pas avoir la chance de revenir par le biais de ma s'engage.

$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]

Je ne le vois pas dans vendor/cache mais je ne sais pas quoi en penser...

$ bundle package | grep 'listen'

J'apprécie votre aide!

mise à jour:

je peux" corriger "le problème en mettant gem 'listen', '~> 3.1.5' dans le Global Gemfile (et en le retirant de :development ). Puis toutes les erreurs disparaissent et tout fonctionne, mais cela semble mauvais.

29
demandé sur lostphilosopher 2016-07-29 19:41:23

8 réponses

si vous êtes sur rails 5 et que vous utilisez par défaut config/environments/development.rb fichier il aura cette ligne de code.

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

cela nécessite l'écoute gem. Cela m'a un peu secoué pendant que je faisais une amélioration de rails 4 à des rails 5

modifier: Oublié si vous mentionnez si vous commentez cette ligne de code dehors il ne sera plus besoin de la gemme d'écoute

48
répondu Brandt 2017-10-31 08:17:27

vous auriez pu par erreur mettre bundle install --without à un moment donné, je l'ai fait de toute façon.

pour revenir à cette exécution:

bundle config --delete without

j'ai aussi lancé bundle config --delete with comme j'ai mis manuellement l'option with aussi par erreur. L'exécution des deux devrait vous ramener au comportement par défaut.

après avoir supprimé la configuration without , j'ai pu exécuter avec succès un bundle install encore et après mon rails s , rails db:migrate etc. travaillé.


vous pouvez confirmer si c'est votre problème en lançant bundle install et regarder la dernière ligne de la sortie. S'il est écrit:

Gems in the groups development and test were not installed.

il est certain que la solution ci-dessus devrait fonctionner pour vous.

31
répondu mtrolle 2016-10-30 18:54:40

je poste ceci comme réponse, mais je n'aime pas ça.

je peux" corriger "le problème en mettant gem 'listen', '~> 3.1.5' dans le Global Gemfile (et en le retirant de :development ). Puis toutes les erreurs disparaissent et tout fonctionne, mais cela semble faux.

13
répondu lostphilosopher 2016-07-29 19:08:15

j'ai le même problème en lançant rails c .

en lisant cet autre débordement de pile post j'ai réalisé qu'il est normal que les deux commandes bundle exec rake ou rails console tournent dans un environnement par défaut production .

j'ai pensé que je vais résoudre le problème, soit en:

  1. , ajoutant que export RAILS_ENV=production dans ~/.bash_profile
  2. écrit explicitement l'environnement dans lequel je veux que la commande s'exécute comme bundle exec rake a_rake:task RAILS_ENV=production rails console --env=production etc...
4
répondu pnknrg 2017-05-23 11:54:40

j'ai eu le même problème. Grâce à la réponse de @newdark j'ai trouvé la bonne solution. En gros, je voulais déployer des rails en mode production . Mais il est évident que vous avez oublié de définir la variable d'environnement RAILS_ENV=production avant d'exécuter server.

pour récapituler, les dépendances pour le mode production ont été installées tandis que les rails ont essayé de démarrer en mode development à cause de l'oubli de régler RAILS_ENV=production . Si j'ajoutais gem listen aux dépendances production ,je dirais être en mode développement sans pouvoir le remarquer.

pour moi la solution était de faire export RAILS_ENV=production avant d'exécuter n'importe quelle commande de rails et garder les dépendances intactes. Espère que j'ai réussi à expliquer.

3
répondu akostadinov 2017-03-17 16:06:51

j'ai eu le même problème aujourd'hui après la mise à niveau des Rails 5.1.5 à 5.2.0. Lors de la première exécution du serveur, il y a eu le problème suivant de 'ressources manquantes':

ActionView::Template::Error (The asset "asterisk_orange.png" is not present in the asset pipeline.)

en Essayant de précompiler les actifs montre le "gem écouter erreur":

$ bundle exec rake assets:precompile
rake aborted!
LoadError: Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile

ma solution a été de définir explicitement l'environnement de production:

$ RAILS_ENV=production bundle exec rake assets:precompile

cela précompile les actifs sans problèmes et le problème des "actifs manquants" a été résolu.

3
répondu Heiko Lübbe 2018-05-01 05:07:51

j'ai utilisé ceci: bundle install --without development

erreur:

ne pouvait pas charger le gemme "listen". Ajouter gem 'listen' au groupe de développement de votre Gemfile (LoadError)

après cela, utilisez ce code:

bundle config --delete without
bundle config --delete with

enfin

bundle install
2
répondu mix-fGt 2017-08-06 11:00:28

j'ai eu le même problème, je le Répare en lançant

rails c -e production
0
répondu Touseef Murtaza 2018-04-30 07:35:32