无论出于何种原因,Ruby on Rails 控制台拒绝启动;它只是挂起。我没有对我的代码进行任何更改,使用相同版本的 Ruby 和 Ruby on Rails 的其他项目也没有问题。当我最终 Ctrl + C 时,我得到了这个堆栈跟踪,它指向 Spring。
我无法解释为什么这种情况从一个时刻到下一个时刻都会发生,而它运行良好。我已经通过 RVM 清除了所有宝石并通过捆绑命令重新安装了所有宝石,但仍然没有运气。任何想法将不胜感激。
据我所知,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$
重新启动 Spring 应该可以修复挂起的命令:
$ bin/spring stop
在删除并重新创建新的 Ruby on Rails 应用程序后,我遇到了挂起命令(rake、bin/rails 等)的情况。谷歌并没有那么有帮助。我希望是这样。
当您重新运行命令时,Spring 将自动启动。
当怀疑Spring是造成怪异的原因时,尝试运行这个命令:
spring stop && spring start
我猜 Spring gem 版本有问题。
转到您的 Gemfile 并评论 gem 'spring'。然后运行
bundle install
并重试。
# gem 'spring'
然后:
bundle install
如果您的工作依赖于 gem,请尝试通过以下方式更新 gem:
bundle update
如果
$ 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
在 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
我最近遇到了同样的问题 解决步骤
bundle exec rails console
Bundle install
Bundle exec rails console