【问题标题】:Ruby on Rails console is hanging when loadingRuby on Rails 控制台在加载时挂起
【发布时间】:2014-09-21 12:45:56
【问题描述】:

由于某种原因,Ruby on Rails 控制台拒绝启动;它只是挂起。我没有对我的代码进行任何更改,使用相同版本的 Ruby 和 Ruby on Rails 的其他项目也没有问题。当我最终 Ctrl + C 我得到这个堆栈跟踪,它指向 Spring。

我无法解释为什么会从一瞬间发生这种情况,而它工作正常。我已经通过 RVM 清除了所有的 gem,并通过 bundle 命令重新安装,但仍然没有运气。任何想法将不胜感激。

据我所知,Ruby on Rails 服务器也没有问题。该问题与项目相关,但没有更改任何代码,只有 Ruby on Rails 控制台存在问题。

Ruby 2.1.2
导轨 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$

【问题讨论】:

    标签: ruby-on-rails ruby console


    【解决方案1】:

    重启 Spring 应该可以修复挂起的命令:

    $ bin/spring stop
    

    在删除并重新创建新的 Ruby on Rails 应用程序后,我遇到了挂起的命令(rake、bin/rails 等)。谷歌没有那么有帮助。我希望是这样。

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

    【讨论】:

    • 这对我来说适用于 Rails 4.1.1。我需要阅读 Spring gem 以了解它在做什么。
    • @cee-dub 但背后的原因是什么,为什么 spring 不让它运行 rails 控制台?
    • 这对我不起作用。停止弹簧后我仍然遇到问题。
    • 刚刚遇到这个问题:当我运行bin/spring stop时,我收到了Spring is not running.的响应所以,我运行ps aux | grep spring,看到5个spring进程正在运行,并手动杀死它们,从而修复了问题。
    • 太棒了!永远不会猜到。
    【解决方案2】:

    我猜是 Spring gem 版本有问题。

    转到您的 Gemfile 并评论 gem 'spring'。然后运行bundle install 再试一次。

    # gem 'spring'
    

    然后:

    bundle install
    

    如果您的工作依赖于 gem,请尝试通过以下方式更新 gem:

    bundle update
    

    【讨论】:

    • 这在 Linux Mint 和 rails 4.1.4 上也为我解决了这个问题
    • 警惕bundle update。如果你这样做,你就有机会在整个环境中彻底改变你的 gem 版本。这会引入很多你不想要的副作用。你也可以bundle update spring 只更新一颗宝石
    • @jaydel 您应该始终将您的版本放在您的 gemfile 中,包括路径版本。 Bundler 会自动更新次要版本,但不会更新主要版本,但您可以随时回滚到您最初指定的版本(您知道您的应用可以在其中运行)。
    • 关于将版本放入您的 Gemfile 中——同意。我不知道更新到主要版本的限制,但是当我仔细考虑时它是有道理的:) 很好的信息,谢谢
    【解决方案3】:

    当怀疑Spring是怪异的原因时,尝试运行这个命令:

    spring stop && spring start
    

    【讨论】:

      【解决方案4】:

      如果$ 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
      

      【讨论】:

        【解决方案5】:

        像这样在 spring gem 的 lib/application.rb 文件中更改以下方法(路径可以使用 gem info spring 命令显示)就可以了:

        def eager_preload
              with_pty do
                # we can't see stderr and there could be issues when it's overflown
                # see https://github.com/rails/spring/issues/396
                STDERR.reopen("/dev/null")
                preload
              end
        end
        

        https://github.com/markiz/spring/commit/5f3ab734fc45d541aaaccb05b59cd95aa49fe8ef

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-08
          • 1970-01-01
          • 2015-05-05
          • 1970-01-01
          • 2011-06-11
          • 1970-01-01
          相关资源
          最近更新 更多