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.
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.
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
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.
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:
export Rails_ENV=production
dans ~/.bash_profilebundle exec rake a_rake:task Rails_ENV=production
Rails console --env=production
etc ...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é.
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.
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
J'ai eu le même problème, je le répare en courant
Rails c -e production
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