wake-up-neo.com

LoadError: Der 'listen' gem (Rails 5) konnte nicht geladen werden

Ich habe eine API-Modus-Rails 5-App, mit der ich rake routes oder Rails s nicht ausführen kann. Der Fehler, den ich erhalte, ist:

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

Ich habe bestätigt, dass sich listen in der Entwicklungsgruppe in meinem Gemfile befindet:

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

Und das ist in meiner 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)

Ich habe das Bundle aktualisiert und das Bundle installiert und festgestellt, dass gem install listen funktioniert. Das hat früher in dieser Woche funktioniert, aber ich habe kein Glück, meine Verpflichtungen zurückzuschicken. 

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

Ich sehe es nicht in vendor/cache, aber ich weiß nicht, was ich davon halten soll ...

$ bundle package | grep 'listen'

Schätze die Hilfe!

Update:

Ich kann das Problem "beheben", indem Sie gem 'listen', '~> 3.1.5' in das globale Gemfile einfügen (und es aus :development entfernen). Dann gehen alle Fehler weg und alles funktioniert, aber das scheint falsch zu sein.

31
lostphilosopher

Ich poste dies als Antwort, aber ich mag es nicht.

Ich kann das Problem "beheben", indem Sie gem 'listen', '~> 3.1.5' in das globale Gemfile einfügen (und es aus :development entfernen). Dann gehen alle Fehler weg und alles funktioniert, aber das scheint falsch zu sein.

14
lostphilosopher

Wenn Sie sich auf Rails 5 befinden und die Standarddatei config /virones/development.rb verwenden, wird diese Codezeile dort enthalten.

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

Dazu muss der Edelstein hören. Dies warf mich ein bisschen, als ich ein Rails 4-Upgrade auf ein Rails 5 durchführte

edit: Vergessen Sie, wenn Sie erwähnen, wenn Sie diese Codezeile auskommentieren, wird der Listened Gem nicht mehr benötigt

54
Brandt

Sie könnten aus Versehen bundle install --without irgendwann gesetzt haben, ich habe es trotzdem getan.

Um diesen Lauf rückgängig zu machen:

bundle config --delete without

Ich habe auch bundle config --delete with ausgeführt, da ich die with-Option auch aus Versehen manuell eingestellt habe. Wenn Sie beide ausführen, sollten Sie wieder zum Standardverhalten zurückkehren.

Nachdem ich die without config gelöscht hatte, konnte ich wieder erfolgreich einen bundle install ausführen und danach funktionierte mein Rails s, Rails db:migrate usw.


Sie können überprüfen, ob dies Ihr Problem ist, indem Sie bundle install ausführen und die vorletzte Zeile in der Ausgabe anzeigen. Wenn es heißt:

Gems in the groups development and test were not installed.

Es ist sicher, dass die oben genannte Lösung für Sie funktionieren sollte.

38
mtrolle

Ich habe das gleiche Problem, indem ich Rails c ausführt.

Durch das Lesen dieses anderen Stack Overflows post habe ich erkannt, dass es normal ist, dass sowohl der bundle exec rake-Befehl als auch Rails console in einer Standardumgebung von production ausgeführt werden. 

Ich dachte, ich werde das Problem entweder lösen durch:

  1. hinzufügen von export Rails_ENV=production in ~/.bash_profile
  2. explizit die Umgebung schreiben, in der der Befehl ausgeführt werden soll, wie bundle exec rake a_rake:task Rails_ENV=productionRails console --env=production etc ...
5
pnknrg

Ich hatte heute ein ähnliches Problem nach einem Upgrade von Rails 5.1.5 auf 5.2.0. Beim ersten Start des Servers gab es das folgende Problem mit fehlenden Assets:

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

Wenn Sie versuchen, die Assets vorzukompilieren, wird der Fehler beim Abhören angezeigt:

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

Meine Lösung bestand darin, die Produktionsumgebung explizit festzulegen:

$ Rails_ENV=production bundle exec rake assets:precompile

Dadurch werden die Assets ohne Probleme vorkompiliert, und das Problem der "fehlenden Assets" wurde behoben.

4
Heiko Lübbe

Ich hatte das gleiche Problem. Dank @newdark answer habe ich die richtige Lösung gefunden. Grundsätzlich wollte ich Rails im production-Modus einsetzen. Vergessen Sie jedoch offensichtlich, die Umgebungsvariable Rails_ENV=production nicht festzulegen, bevor Sie den Server ausführen.

Zur Wiederholung wurden also Abhängigkeiten für den production-Modus installiert, während Rails versuchte, im development-Modus zu starten, weil vergessen wurde, Rails_ENV=production einzustellen. Wenn ich dann in die Abhängigkeiten von listen gem production aufgenommen habe, würde ich im Entwicklungsmodus laufen, ohne dass ich es merken kann.

Für mich bestand die Lösung darin, export Rails_ENV=production vor der Ausführung von Rails-Befehlen auszuführen und Abhängigkeiten intakt zu halten. Ich hoffe es ist mir gelungen zu erklären.

4
akostadinov

Ich habe folgendes verwendet: bundle install --without development 

Error: 

Der 'listen' gem konnte nicht geladen werden. Fügen Sie gem 'listen' zur Entwicklungsgruppe Ihrer Gemfile (LoadError) hinzu.

Verwenden Sie danach diesen Code:

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

Endlich 

bundle install
3
mix-fGt

Ich hatte das gleiche Problem, ich korrigiere es durch Laufen 

Rails c -e production
1
Touseef Murtaza

Ich hatte den gleichen Fehler beim Versuch, mongoid database file zu generieren.

aber ich habe Rails new project auf Ruby 2.5.1 erstellt. Ihre Ruby ist 2.2. Die Kausalität könnte also in meiner Situation anders sein.

wenn ich Rails new project verwendet habe, wurde es in Version 5.2 erstellt, dann habe ich gem in 5.1.2 geändert und es tritt ein Problem auf. Wenn ich mit Rails _5.1.6_ new in Gemfile erstellt habe, wird ein zusätzliches Paket für die Entwicklung generiert.

  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

auf diese weise zeigte "listen" mich automatisch in gemfile

0
sonic