web-dev-qa-db-fra.com

LoadError: Impossible de charger la gem 'listen' (Rails 5)

J'ai une application Rails 5 en mode API qui ne me permet pas d'exécuter rake routes ou Rails s. L'erreur que je reçois 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 de 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 mon 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)

J'ai mis à jour le paquet et le paquet est installé et j'ai vérifié que gem install listen fonctionnait. Cela fonctionnait plus tôt cette semaine, mais je n’ai pas la chance de relire mes commits. 

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

Appréciez l'aide!

Mettre à jour:

Je peux "résoudre" le problème en mettant gem 'listen', '~> 3.1.5' dans le fichier global Gemfile (et en le supprimant de :development). Alors toutes les erreurs disparaissent et tout fonctionne, mais cela semble faux.

31
lostphilosopher

Je poste ceci comme réponse, mais je ne l'aime pas.

Je peux "résoudre" le problème en mettant gem 'listen', '~> 3.1.5' dans le fichier global Gemfile (et en le supprimant de :development). Alors toutes les erreurs disparaissent et tout fonctionne, mais cela semble faux.

14
lostphilosopher

Si vous êtes sur Rails 5 et que vous utilisez le fichier par défaut config/environment/development.rb , il aura cette ligne de code.

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

Cela nécessite que la pierre précieuse écoute. Cela m’a fait perdre un peu de temps alors que je faisais une mise à niveau de Rails 4 vers un Rails 5.

edit: Oublié si vous mentionnez que si vous commentez cette ligne de code, elle n’aura plus besoin du joyau d’écoute

54
Brandt

Vous pourriez par erreur avoir défini bundle install --without à un moment donné, de toute façon.

Pour annuler cette exécution:

bundle config --delete without

J'ai également exécuté bundle config --delete with car j'ai défini manuellement l'option with ainsi par erreur. Exécuter les deux devrait vous ramener au comportement par défaut.

Après avoir supprimé la configuration without, je pouvais exécuter à nouveau un bundle install et ensuite mon Rails s, Rails db:migrate etc. fonctionnait.


Vous pouvez confirmer s'il s'agit de votre problème en exécutant bundle install et en consultant l'avant-dernière ligne du résultat. Si c'est écrit:

Gems in the groups development and test were not installed.

C'est sûr que la solution ci-dessus devrait fonctionner pour vous.

38
mtrolle

J'ai le même problème en exécutant Rails c.

En lisant cet autre dépassement de pile post , j’ai réalisé qu’il est normal que les commandes bundle exec rake et Rails console soient exécutées dans un environnement production par défaut. 

J'ai pensé résoudre le problème soit par:

  1. ajout de export Rails_ENV=production dans ~/.bash_profile
  2. écrire explicitement l'environnement dans lequel je veux que la commande s'exécute comme bundle exec rake a_rake:task Rails_ENV=productionRails console --env=production etc ...
5
pnknrg

J'ai eu le même problème aujourd'hui après la mise à niveau de Rails 5.1.5 à 5.2.0. Lors de la première utilisation du serveur, le problème suivant: "actifs manquants":

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

Le fait de tenter de précompiler les ressources montre l’erreur «Écoute d’écoute»:

$ 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 consistait à 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é corrigé.

4
Heiko Lübbe

J'ai eu le même problème. Grâce à @newdark answer, j'ai trouvé la bonne solution. En gros, je voulais déployer des Rails en mode production. Mais évidemment, a oublié de définir la variable d'environnement Rails_ENV=production avant d'exécuter le serveur.

En résumé, les dépendances pour le mode production ont été installées pendant que Rails tentait de démarrer en mode development en raison de l’oubli de la définition de Rails_ENV=production. Si je continuais à ajouter gem listen aux dépendances production, je fonctionnerais en mode de développement sans que je puisse le remarquer.

Pour moi, la solution consistait à faire export Rails_ENV=production avant d'exécuter des commandes Rails et à conserver les dépendances intactes. J'espère que j'ai réussi à expliquer.

4
akostadinov

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

Erreur: 

Impossible de charger le bijou 'listen'. Ajoutez 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

Finalement 

bundle install
3
mix-fGt

J'ai eu le même problème, je le répare en courant 

Rails c -e production
1
Touseef Murtaza

J'ai eu la même erreur en essayant de générer mongoid database file.

mais j'ai créé Rails new project sur Ruby 2.5.1. Votre Ruby est 2.2. donc la causalité pourrait être différente dans ma situtation.

quand j'ai utilisé Rails new project, il a été créé dans la version 5.2, puis j'ai changé de gem en 5.1.2 et un problème survient. Lorsque j'ai créé avec Rails _5.1.6_ new dans Gemfile, un pack supplémentaire a été généré pour le développement.

  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

de cette façon, 'écoute' m'a montré automatiquement dans gffile

0
sonic