Konsola Ruby on Rails zawiesza się podczas ładowania

146

Z jakiegoś powodu konsola Ruby on Rails odmawia uruchomienia; po prostu wisi. Nie wprowadziłem żadnych zmian w moim kodzie, a inne projekty używające tej samej wersji Ruby i Ruby on Rails nie mają żadnego problemu. Kiedy w końcu Ctrl+ Cdostaję ten ślad stosu, który wskazuje na Spring.

Nie potrafię wyjaśnić, dlaczego dzieje się to od jednej chwili do drugiej, gdzie działało dobrze. Usunąłem wszystkie klejnoty za pomocą RVM i ponownie zainstalowałem wszystko za pomocą polecenia pakietu, ale nadal nie mam szczęścia. Wszelkie pomysły będą mile widziane.

Z tego co wiem, serwer Ruby on Rails nie ma żadnego problemu. Problem jest związany z projektem, jednak żaden kod się nie zmienił i dotyczy to tylko konsoli Ruby on Rails.

Ruby 2.1.2
Rails 4.1.4

user_a@ubuntu:~/work/app_a$ rails console
^C/home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:54:in `gets': Interrupt
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:54:in `verify_server_version'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:25:in `call'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/rails.rb:23:in `call'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client.rb:26:in `run'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/bin/spring:48:in `<top (required)>'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `load'
    from /home/user_a/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `<top (required)>'
    from /home/user_a/work/app_a/bin/spring:16:in `require'
    from /home/user_a/work/app_a/bin/spring:16:in `<top (required)>'
    from bin/rails:3:in `load'
    from bin/rails:3:in `<main>'

user_a@ubuntu:~/work/app_a$
theog
źródło

Odpowiedzi:

415

Ponowne uruchomienie Spring powinno naprawić zawieszone polecenia:

$ bin/spring stop

Po usunięciu i odtworzeniu nowej aplikacji Ruby on Rails doświadczyłem zawieszania się poleceń (rake, bin / rails itp.). Google nie było tak pomocne. Mam nadzieję, że tak.

Wiosna rozpocznie się automatycznie, gdy ponownie uruchomisz polecenie.

cee-dub
źródło
To działało dla mnie z Railsami 4.1.1. Muszę poczytać o Spring Gem, żeby zobaczyć, co robi.
jetimms
1
@ cee-dub, ale jaki jest tego powód, dlaczego wiosna nie pozwala sobie na prowadzenie konsoli?
kamal
3
To nie zadziałało dla mnie. Nadal mam problem po zatrzymaniu wiosny.
Donato
3
Właśnie bin/spring stopnatknąłem się na ten problem: kiedy uruchomiłem , otrzymałem odpowiedź. Spring is not running.Uruchomiłem więc ps aux | grep spring5 procesów wiosennych i ręcznie je zabiłem, co rozwiązało problem.
Ian Taylor
Niesamowity! Nigdy bym tego nie domyślił.
Rambatino
7

Wydaje mi się, że coś jest nie tak z wersją Spring Gem.

Przejdź do swojego pliku Gemfile i skomentuj klejnot „wiosna”. Następnie biegnij bundle installi spróbuj ponownie.

# gem 'spring'

I wtedy:

bundle install

Jeśli twoja praca zależy od klejnotu, spróbuj zaktualizować klejnoty przez:

bundle update
Eki Eqbal
źródło
To rozwiązało to również dla mnie na Linux Mint z szynami 4.1.4
slhck
3
uważaj na bundle update. Jeśli zrobisz to w ten sposób, masz szansę radykalnie zmienić wersje klejnotów w całym środowisku. Może to spowodować wiele niepożądanych efektów. Możesz także bundle update springzaktualizować tylko jeden klejnot
jaydel
@jaydel Zawsze powinieneś umieszczać swoje wersje w pliku gemfile, łącznie z wersją ścieżki. Program Bundler automatycznie zaktualizuje wersje pomocnicze, ale nie wersje główne, ale w dowolnym momencie możesz przywrócić pierwotnie określoną wersję (w której wiesz, że działa Twoja aplikacja).
Ben Aubin
dotyczące umieszczania wersji w twoim Gemfile - uzgodniono. Nie wiedziałem o ograniczeniach dotyczących aktualizacji do głównych wersji, ale ma to sens, kiedy się zastanowię :) Dobra informacja, dzięki
jaydel
3

Jeśli $ bin/spring stopto nie rozwiąże problemu, sprawdź, czy nadal nie istnieje proces osieroconej wiosny:

$ ps aux | grep -i spring

Jeśli zobaczysz coś takiego

user  7163  0.0  0.0 110356  2165 pts/3    S+   19:40   0:00 grep --color=auto -i spring
user 16980  0.0  0.4 398826 17580 ?        Sl   Aug31   0:00 spring server | current | started 277 hours ago     

następnie zabij błędny proces sprężynowania i spróbuj ponownie uruchomić konsolę:

$ kill -9 16980 
$ rails c
littleforest
źródło
1

Gdy podejrzewa się, że przyczyną dziwności jest wiosna, spróbuj uruchomić to polecenie:

spring stop && spring start
Yurii Halapup
źródło