O console do Ruby on Rails está suspenso ao carregar

146

Por qualquer motivo, o console do Ruby on Rails se recusa a iniciar; apenas trava. Não fiz nenhuma alteração no meu código e outros projetos usando a mesma versão do Ruby e Ruby on Rails não têm problema. Quando eu finalmente Ctrl+ Crecebo esse rastreamento de pilha, que aponta para Spring.

Não sei explicar por que isso está acontecendo de um momento para o outro, onde estava funcionando bem. Eu limpei todas as gemas através do RVM e reinstalei tudo através do comando bundle, mas ainda não tive sorte. Todas as idéias seriam apreciadas.

Além disso, o servidor Ruby on Rails não tem problemas, tanto quanto eu posso dizer. O problema está relacionado ao projeto, no entanto, nenhum código foi alterado e é apenas o console do Ruby on Rails que tem o problema.

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
fonte

Respostas:

415

Reiniciar o Spring deve corrigir os comandos suspensos:

$ bin/spring stop

Experimentei comandos pendentes (rake, bin / rails, etc.) após excluir e recriar um novo aplicativo Ruby on Rails. O Google não foi tão útil. Espero que seja.

O Spring começará automaticamente quando você executar novamente seu comando.

cee-dub
fonte
Isso funcionou para mim com o Rails 4.1.1. Preciso ler a gema da primavera para ver o que está fazendo.
jetimms
1
@ cee-dub, mas qual é a razão por trás disso, por que a primavera não está deixando rodar o console de trilhos?
kamal
3
Isto não funcionou para mim. Ainda estou com problemas depois de parar a primavera.
187 Donato
3
acabei de encontrar este problema: quando executei bin/spring stop, recebi a resposta Spring is not running.Então, executei ps aux | grep spring, vi 5 processos de primavera em execução e os matei manualmente, o que solucionou o problema.
Ian Taylor
Surpreendente! Nunca teria adivinhado isso.
Rambatino 28/02
7

É algo errado com a versão da gema da Primavera, eu acho.

Vá para o seu Gemfile e comente a gema 'spring'. Em seguida, execute bundle installe tente novamente.

# gem 'spring'

E depois:

bundle install

Se o seu trabalho depende da gema, tente atualizar as gemas:

bundle update
Eki Eqbal
fonte
Isso resolveu para mim também no Linux Mint com trilhos 4.1.4
slhck 31/07
3
tenha cuidado bundle update. Se você fizer dessa maneira, poderá alterar radicalmente suas versões de gemas em todo o ambiente. Isso pode introduzir muitos efeitos colaterais que você não deseja. Você também pode fazer bundle update springpara atualizar apenas uma jóia
jaydel
@jaydel Você deve sempre colocar suas versões no seu gemfile, incluindo a versão do caminho. O Bundler atualizará automaticamente versões secundárias, mas não versões principais, mas você poderá reverter para a versão especificada originalmente (na qual você sabe que seu aplicativo funciona) a qualquer momento.
Ben Aubin
sobre a colocação de versões no seu Gemfile - concordou. Eu não sabia sobre a restrição de atualização para as versões principais, mas faz sentido quando eu pensar sobre isso :) Boa informação, graças
jaydel
3

Se $ bin/spring stopnão resolver o problema, verifique se ainda não existe um processo órfão do Spring:

$ ps aux | grep -i spring

Se você vir algo como

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     

Em seguida, elimine o processo incorreto da primavera e tente iniciar o console novamente:

$ kill -9 16980 
$ rails c
pequena floresta
fonte
1

Quando houver suspeita de que o Spring seja a causa da estranheza, tente executar este comando:

spring stop && spring start
Yurii Halapup
fonte