La console Ruby on Rails est suspendue lors du chargement

146

Pour une raison quelconque, la console Ruby on Rails refuse de démarrer; il accroche juste. Je n'ai apporté aucune modification à mon code, et d'autres projets utilisant la même version de Ruby et Ruby on Rails n'ont aucun problème. Quand j'ai finalement Ctrl+ Cj'obtiens cette trace de pile, qui pointe vers Spring.

Je ne peux pas expliquer pourquoi cela se produit d'un moment à l'autre, là où cela fonctionnait bien. J'ai effacé toutes les gemmes via RVM et réinstallé tout via la commande bundle, mais toujours pas de chance. Toute idée serait appréciée.

Aussi, le serveur Ruby on Rails n'a aucun problème pour autant que je sache. Le problème est lié au projet, mais aucun code n'a changé, et c'est uniquement la console Ruby on Rails qui a le problème.

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$
théog
la source

Réponses:

415

Le redémarrage de Spring devrait corriger les commandes suspendues:

$ bin/spring stop

J'ai rencontré des commandes suspendues (rake, bin / rails, etc.) après avoir supprimé et recréé une nouvelle application Ruby on Rails. Google n'a pas été si utile. J'espère que c'est.

Spring démarrera automatiquement lorsque vous réexécuterez votre commande.

cee-dub
la source
Cela a fonctionné pour moi avec Rails 4.1.1. J'ai besoin de lire sur Spring Gem pour voir ce qu'il fait.
jetimms
1
@ cee-dub mais quelle est la raison derrière cela, pourquoi le ressort ne laisse pas courir les rails de la console?
kamal
3
Cela n'a pas fonctionné pour moi. Je rencontre toujours des problèmes après l'arrêt du printemps.
Donato
3
bin/spring stopJe viens de rencontrer ce problème: lorsque j'ai couru , j'ai reçu la réponse. Spring is not running.Donc, j'ai couru ps aux | grep spring, j'ai vu 5 processus de printemps en cours d'exécution et je les ai tués manuellement, ce qui a résolu le problème.
Ian Taylor
Incroyable! Je n'aurais jamais deviné ça.
Rambatino
7

C'est quelque chose qui ne va pas avec la version Spring Gem, je suppose.

Accédez à votre Gemfile et commentez la gemme «printemps». Ensuite, exécutez bundle installet réessayez.

# gem 'spring'

Puis:

bundle install

Si votre travail dépend de la gemme, essayez de mettre à jour les gemmes en:

bundle update
Eki Eqbal
la source
Cela l'a résolu pour moi aussi sur Linux Mint avec des rails 4.1.4
slhck
3
méfiez-vous de bundle update. Si vous le faites de cette façon, vous avez la possibilité de changer radicalement vos versions de gemmes dans tout l'environnement. Cela peut introduire de nombreux effets secondaires dont vous ne voulez pas. Vous pouvez également faire bundle update springpour mettre à jour un seul bijou
jaydel
@jaydel Vous devriez toujours mettre vos versions dans votre gemfile, y compris la version du chemin. Bundler mettra automatiquement à jour les versions mineures, mais pas les versions majeures, mais vous pouvez revenir à la version que vous avez spécifiée à l'origine (dans laquelle vous savez que votre application fonctionne) à tout moment.
Ben Aubin
concernant la mise des versions dans votre Gemfile - accepté. Je ne connaissais pas la restriction de mise à jour vers les versions majeures, mais cela a du sens quand j'y pense :) Bonne information, merci
jaydel
3

Si $ bin/spring stopcela ne résout pas le problème, vérifiez qu'il n'y a pas encore de processus Spring orphelin:

$ ps aux | grep -i spring

Si vous voyez quelque chose comme

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     

puis tuez le processus de ressort errant et essayez de redémarrer la console:

$ kill -9 16980 
$ rails c
petite forêt
la source
1

Lorsqu'on soupçonne que Spring est la cause de l'étrangeté, essayez d'exécuter cette commande:

spring stop && spring start
Yurii Halapup
la source