加载时Ruby on Rails控制台挂起


146

出于某种原因,Ruby on Rails控制台拒绝启动。它只是挂了。我尚未对代码进行任何更改,使用相同版本的Ruby和Ruby on Rails的其他项目也没有问题。当我最终Ctrl+ C获得该堆栈跟踪时,它指向Sp​​ring。

我无法解释为什么这种情况从一瞬间到下一瞬间都可以正常工作。我已经通过RVM清除了所有的gem,并通过bundle命令重新安装了所有gem,但是还是没有运气。任何想法,将不胜感激。

据我所知,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$

Answers:


415

重新启动Spring应该修复挂起的命令:

$ bin/spring stop

在删除并重新创建新的Ruby on Rails应用程序后,我遇到了挂起命令(耙,仓/轨等)的问题。Google没那么有用。我希望是这样。

重新运行命令时,Spring将自动启动。


这适用于Rails 4.1.1。我需要阅读Spring gem才能知道它在做什么。
jetimms 2014年

1
@ cee-dub但是它背后的原因是什么,为什么spring不让它运行rails console?
卡马尔2015年

3
这对我没有用。停止春天后,我仍然遇到问题。
多纳托2015年

3
只是遇到了这个问题:当我运行时bin/spring stop,我收到了响应Spring is not running.因此,我运行了ps aux | grep spring,看到5个spring进程正在运行,并手动杀死了它们,从而解决了问题。
伊恩·泰勒

惊人!永远都不会猜到。
Rambatino

7

我猜是Spring gem版本有问题。

转到您的Gemfile并注释gem'spring'。然后运行bundle install,然后重试。

# gem 'spring'

然后:

bundle install

如果您的工作取决于宝石,请尝试通过以下方式更新宝石:

bundle update

这也为我在带有导轨4.1.4的Linux Mint上解决了它
slhck

3
警惕bundle update。如果这样做的话,您将有机会在整个环境中彻底改变您的gem版本。这会带来很多您不希望出现的副作用。您也可以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     

然后终止错误的spring进程,然后尝试再次启动控制台:

$ kill -9 16980 
$ rails c

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.