如何抑制Rails控制台/ irb输出


87

我遇到了一个很奇怪的问题。

我在Rails Console的生产服务器中测试了一些数据库条目,其中几乎所有命令都导致大量的o / p行,由于ssh通道被挂起了:(

有没有办法抑制控制台/ irb的屏幕显示?

谢谢

Answers:


187

您可以追加您的所有命令/语句都为零

例:

users = User.all; nil

实际上,irb打印最后执行的语句的(返回)值。因此,在这种情况下,它将仅打印nil,因为nil是最后执行的有效语句:)


13
太棒了,更短的方法是分号,后跟类似对象users = User.all; 0
Bob,

1
这仅适用于返回的对象,不适用于p和puts。
the_minted 2014年

它只是一个hack,您可以只使用count,like Users.all.count,仅一行输出,如果您想将输出存储在变量中,可以这样进行users = User.all; Users.all.count
Tasawar Hussain

31

在寻找如何使irb / console输出静音的解决方案时,我还在austinruby.com上找到了答案:

沉默irb:

conf.return_format = ""

默认输出:

conf.return_format = "=> %s\n"

限制为例如512个字符:

conf.return_format = "=> limited output\n %.512s\n"

很有用。打开irb / rails控制台时有没有办法设置此值,即在其中添加参数别名?
Kache

您可以尝试将其放入$ HOME / .irbrc
hdgarrood13年

8

在这里,将此添加到您的〜/ .irbrc中:

require 'ctx'
require 'awesome_print'

module IRB
  class Irb    
    ctx :ap do
      def output_value()
        ap(@context.last_value)
      end
    end
    ctx :puts do
      def output_value()
        puts(@context.last_value)
      end
    end
    ctx :p do
      def output_value()
        p(@context.last_value)
      end
    end
    ctx :quiet do
      def output_value()
      end
    end
  end
end

def irb_mode(mode)
  ctx(mode) { irb }
end

(注意:当然,您必须首先安装ctxgem,尽管它awesome_print是可选的。)

现在,在使用irb的任何控制台上时,都可以执行以下操作:

正常模式:

irb(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }

=> {:this=>"is a complex object", :that=>[{:will=>"probably"}, {:be=>"good to read"}], :in=>{:some=>{:formatted=>"way"}}}

...是的,正是您所期望的。

awesome_print 模式:

irb(main):002:0> irb_mode(:ap)
irb#1(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }

=> {
    :this => "is a complex object",
    :that => [
        [0] {
            :will => "probably"
        },
        [1] {
            :be => "good to read"
        }
    ],
      :in => {
        :some => {
            :formatted => "way"
        }
    }
}

...哇,现在一切都很棒了!:)

静音模式:

irb#1(main):002:0> irb_mode(:quiet)
irb#1(main):001:0> { this:'is a complex object', that:[ { will:'probably'}, { be:'good to read' } ], in:{ some:{ formatted:'way'} } }
irb#1(main):002:0>

...哇,根本没有输出?真好

无论如何,您都可以添加自己喜欢的任何模式,完成该模式后, exit或退出,然后回到先前的模式。

希望对您有所帮助!:)


4

Supress输出,一般

另外,根据您的需求,通常不仅仅在irb / console 中使用quietlysilence_stream抑制输出:

silence_stream(STDOUT) do
  users = User.all
end

注意:quietly在Ruby 2.2.0中将不推荐使用,并将最终将其删除。 (感谢BenMorganIO!)

这里可以找到更多信息。


1
请注意,quietly在ruby 2.2.0 中已弃用,并且将要删除它。
BenMorganIO 2015年

@BenMorganIO在答案中添加了注释。感谢那!
约书亚·品特

4
irb --simple-prompt --noecho
  • --simple-prompt -使用简单的提示- >>
  • --noecho -抑制运算结果

3

在irb中运行以下命令对我有用:

irb_context.echo = false
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.