Консоль Ruby on Rails зависает при загрузке

146

По какой-то причине консоль Ruby on Rails отказывается запускаться; это просто висит. Я не внес никаких изменений в свой код, и другие проекты, использующие одну и ту же версию Ruby и Ruby on Rails, не имеют проблем. Когда я наконец Ctrl+ Cполучаю эту трассировку стека, которая указывает на Spring.

Я не могу объяснить, почему это происходит от одного момента к другому, где все работало нормально. Я очистил все драгоценные камни через RVM и переустановил все через команду bundle, но все же не повезло. Любые идеи были бы хорошы.

Насколько я могу судить, сервер Ruby on Rails также не имеет проблем. Проблема связана с проектом, однако код не изменился, и проблема заключается только в консоли 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
источник

Ответы:

415

Перезапуск Spring должен исправить зависание команд:

$ bin/spring stop

После удаления и повторного создания нового приложения Ruby on Rails у меня возникали зависающие команды (rake, bin / rails и т. Д.). Google не был таким полезным. Я надеюсь, что это так.

Spring начнется автоматически при повторном запуске команды.

СЕЕ-даб
источник
Это работало для меня с Rails 4.1.1. Мне нужно прочитать о Spring Gem, чтобы увидеть, что он делает.
Джетимс
1
@ cee-dub, но в чем причина этого, почему пружина не позволяет запустить консоль?
Камаль
3
Это не сработало для меня. Я все еще испытываю проблему после остановки весны.
Донато
3
просто столкнулся с этой проблемой: когда я бежал bin/spring stop, я получил ответ Spring is not running.Итак, я побежал ps aux | grep spring, увидел 5 запущенных пружинных процессов и вручную убил их, что решило проблему.
Ян Тейлор
Удивительный! Никогда бы не догадался
Рамбатино
7

Я думаю, что-то не так с версией Spring Gem.

Зайдите в свой Gemfile и прокомментируйте самоцвет 'spring'. Затем запустите bundle installи попробуйте снова.

# gem 'spring'

А потом:

bundle install

Если ваша работа зависит от драгоценного камня, попробуйте обновить драгоценные камни:

bundle update
Эки Экбал
источник
Это решило это и для меня на Linux Mint с рельсами 4.1.4
slhck
3
быть осторожными bundle update. Если вы сделаете это таким образом, у вас будет шанс радикально изменить версии ваших драгоценных камней во всей среде. Это может вызвать много побочных эффектов, которые вам не нужны. Вы также можете сделать, bundle update springчтобы обновить только один драгоценный камень
jaydel
@jaydel Вы всегда должны помещать свои версии в свой gemfile, включая путь к версии. Bundler автоматически обновляет второстепенные версии, но не основные, но вы можете в любое время откатиться до версии, которую вы изначально указали (в которой работает ваше приложение).
Бен Обин
По поводу размещения версий в вашем Gemfile - согласился. Я не знал об ограничении обновления до основных версий, но это имеет смысл, когда я обдумываю это :) Хорошая информация, спасибо
jaydel
3

Если $ bin/spring stopпроблема не решается, проверьте, не существует ли еще не завершившийся процесс Spring без изменений:

$ ps aux | grep -i spring

Если вы видите что-то вроде

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     

затем убейте процесс ошибочной пружины и попробуйте снова запустить консоль:

$ kill -9 16980 
$ rails c
littleforest
источник
1

Когда есть подозрение, что Spring является причиной странностей, попробуйте выполнить эту команду:

spring stop && spring start
Юрий Халапуп
источник