ChatGPT解决这个技术问题 Extra ChatGPT

Ruby on Rails 控制台在加载时挂起

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

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

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

红宝石 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$

P
Peter Mortensen

重新启动 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 进程正在运行,并手动杀死它们,从而解决了问题。
惊人!永远不会猜到这一点。
P
Peter Mortensen

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

spring stop && spring start

P
Peter Mortensen

我猜是 Spring gem 版本有问题。

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

# gem 'spring'

接着:

bundle install

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

bundle update

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

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

O
Olivier B.

在 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