Ruby/Rails终端命令错误输出首行缺失问题求助
Ruby/Rails命令错误输出首行缺失问题
困扰这个问题很久了,之前一直忍,但现在实在顶不住,找了各种办法都没解决。每次在终端执行Ruby/Rails命令,错误输出的首行都会消失——而那行恰恰是实际的错误信息。
我的环境是Ubuntu 20.04,用zsh/oh-my-zsh,bash里也有同样的问题,而且多个Ruby版本都出现这个情况。
示例错误输出:
➜ CODE_BASE git:(branch_name) ✗ rails routes Traceback (most recent call last): 42: from bin/rails:9:in `<main>' 41: from bin/rails:9:in `require' 40: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/commands.rb:18:in `<top (required)>' 39: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/command.rb:48:in `invoke' 38: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/command/base.rb:69:in `perform' 37: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' 36: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' 35: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' 34: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/commands/routes/routes_command.rb:13:in `perform' 33: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/command/actions.rb:15:in `require_application_and_environment!' 32: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/command/actions.rb:28:in `require_environment!' 31: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application.rb:367:in `require_environment!' 30: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `require' 29: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency' 28: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `block in require' 27: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `require' 26: from /home/penguin/Projects/CODE_BASE/config/environment.rb:5:in `<top (required)>' 25: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application.rb:391:in `initialize!' 24: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/initializable.rb:60:in `run_initializers' 23: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each' 22: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each' 21: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component' 20: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:347:in `call' 19: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:347:in `each' 18: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component' 17: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from' 16: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component' 15: from /usr/share/rvm/rubies/ruby-2.7.6/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each' 14: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/initializable.rb:61:in `block in run_initializers' 13: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `run' 12: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `instance_exec' 11: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application/finisher.rb:195:in `block in <module:Finisher>' 10: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application/routes_reloader.rb:10:in `execute' 9: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/file_update_checker.rb:83:in `execute' 8: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application/routes_reloader.rb:35:in `block in updater' 7: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application/routes_reloader.rb:21:in `reload!' 6: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application/routes_reloader.rb:47:in `load_paths' 5: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application/routes_reloader.rb:47:in `each' 4: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/railties-6.1.4.1/lib/rails/application/routes_reloader.rb:47:in `block in load_paths' 3: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:326:in `load' 2: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency' 1: from /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:326:in `block in load' /home/penguin/.rvm/gems/ruby-2.7.6/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:326:in `load':
解决步骤
- 先重置终端设置:执行
stty sane,然后再运行Rails命令测试,终端行配置异常可能导致首行被吞。 - 测试纯净shell环境:zsh下执行
zsh --no-rcs,bash下执行bash --norc,再运行命令,排除oh-my-zsh或shell配置的干扰。 - 重新生成RVM wrapper脚本:如果用RVM,执行
rvm wrapper regenerate,修复可能被损坏的Rails命令包装脚本。 - 捕获完整输出:临时需要看错误的话,把输出重定向到文件:
rails routes > error.log 2>&1,打开error.log就能看到完整内容。 - 排查全局/项目问题:在项目外执行
ruby -e 'raise "测试错误"',如果首行也缺失,说明是全局Ruby环境问题;如果正常,那就是项目代码里有修改异常输出的配置。
内容的提问来源于stack exchange,提问作者rescue_penguin
相关产品推荐
相关产品推荐

