2016-07-29 26 views
16

Mam aplikację Rails 5 w trybie API, która nie pozwala uruchomić rake routes lub rails s. Błąd pojawia się:LoadError: Nie można załadować klejnotu "listen" (Rails 5)

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

I zostały zweryfikowane, że listen jest w grupie rozwojowej w moim 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 

i że jest to w moim 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) 

Mam pakiet zaktualizowany i pakiet zainstalowany i zweryfikowano, że działa gem install listen. To działało wcześniej w tym tygodniu, ale nie mam szczęścia wracając do moich zobowiązań.

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

nie widzę go w vendor/cache ale nie jestem pewien, co zrobić z tym, że ...

$ bundle package | grep 'listen' 

Docenić pomocy!

Aktualizacja:

mogę "naprawić" ten problem poprzez wprowadzenie gem 'listen', '~> 3.1.5' w globalnej Gemfile (i usunięcie go z :development). Wtedy wszystkie błędy znikną, a wszystko będzie działać, ale wydaje się, że jest źle.

Odpowiedz

12

Zamieszczam to jako odpowiedź, ale nie podoba mi się to.

Mogę "rozwiązać" problem, umieszczając gem 'listen', '~> 3.1.5' w globalnym pliku Gemfile (i usuwając go z :development). Wtedy wszystkie błędy znikną, a wszystko będzie działać, ale wydaje się, że jest źle.

+0

mający ten sam problem teraz, każda zmiana w tej sprawie? –

+0

@PetrosKyriakou niestety nie. Mam nadzieję, że opublikowane rozwiązanie działa dla Ciebie w międzyczasie. – lostphilosopher

+0

cóż, tak, ale nie lubię tego rozwiązania bardziej niż ty ... dzięki za to! –

17

Być może przez pomyłkę ustawiłeś bundle install --without w pewnym momencie, tak czy inaczej.

Aby przywrócić ten run:

bundle config --delete without

Ja również prowadził bundle config --delete with jak ręcznie ustawić with opcji, jak również przez pomyłkę. Uruchomienie obu powinno przywrócić domyślne zachowanie.

Po usunięciu konfiguracji without mogłem ponownie uruchomić bundle install, a następnie zadziałały moje rails s, rails db:migrate itp.


można sprawdzić, czy jest to Twój problem, uruchamiając bundle install i spojrzeć na przedostatnim wierszu wyjścia. Jeśli stwierdza:

Gems in the groups development and test were not installed.

To na pewno powyżej rozwiązania powinny pracować dla Ciebie.

30

Jeśli jesteś na szynach 5 i używasz domyślnego pliku config/environments/development.rb, będzie on zawierał ten wiersz kodu.

config.file_watcher = ActiveSupport::EventedFileUpdateChecker 

To wymaga posłuchania klejnotu. Ten rzucił mnie na trochę jak robiłem Rails 4 uaktualnień do szyn 5

edit: Zapomniałeś jeśli wspomnieć jeśli skomentować ten wiersz kodu się, że nie będzie trzeba gem wysłuchać już

+2

Dzięki. Musiałem skomentować tę linię. Jest to rodzaj cichej zależności w tym sensie, że nie pojawia się jako zależność w bundler. –

+0

Yeah Komentowanie tego sprawia, że ​​powyższy błąd zniknął. Zapomniałem wspomnieć o tej części. – Brandt

3

I miał ten sam problem. Dzięki odpowiedzi @newdark znalazłem poprawne rozwiązanie. Zasadniczo chciałem wdrożyć szyny w trybie production. Ale oczywiście zapomniałem ustawić zmienną środowiskową RAILS_ENV=production przed uruchomieniem serwera.

Podsumowując, zostały zainstalowane zależności dla trybu production, podczas gdy szyny próbowały uruchomić w trybie development, ponieważ zapomniały ustawić RAILS_ENV=production. Jeśli dodam gem listen do zależności production, będę pracował w trybie programistycznym bez możliwości zauważenia.

Dla mnie rozwiązaniem było wykonanie export RAILS_ENV=production przed wykonaniem jakichkolwiek poleceń rails i utrzymanie nienaruszonych zależności. Mam nadzieję, że udało mi się to wyjaśnić.

4

Mam ten sam problem, uruchamiając rails c.

Czytając ten drugi przepełnienie stosu post ja wiedziałem, że to jest normalne, że zarówno polecenie bundle exec rake lub rails console są wyświetlane w domyślnej production środowiska.

Pomyślałem będę rozwiązać ten problem poprzez:

  1. dodając export RAILS_ENV=production w ~/.bash_profile
  2. wyraźnie pisemnie środowiska, w którym chcę polecenie, aby wykonać jak bundle exec rake a_rake:task RAILS_ENV=productionrails console --env=production etc ...
+0

Miałem ten sam problem, ponieważ instalowałem moją aplikację z 'bundle install - without development test', a następnie uruchomiłem ją bez określania' RAILS_ENV = production'. Tak więc moja aplikacja działała w trybie "rozwoju" bez zainstalowanych klejnotów programistycznych. –

0

użyłem tego: bundle install --without development

Error:

Could not load the 'listen' gem. Add gem 'listen' to the development group of your Gemfile (LoadError)

Po tym, użyj tego kodu:

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

Wreszcie

bundle install