Railsコンソール/ irb出力を抑制する方法


87

私はかなり奇妙な問題に悩まされています。

Rails Consoleの本番サーバーのいくつかのdbエントリをテストしていましたが、sshチャネルがハングしていたため、ほとんどすべてのコマンドが膨大な数のo / p行を生成していました:(

コンソール/ IRB画面一式を抑制する方法はありますか?

ありがとう

回答:


187

追加できますすべてのコマンド/ステートメントにnil

例:

users = User.all; nil

実際にirbは、最後に実行されたステートメントの(戻り)値を出力します。したがって、この場合、nilは最後に実行された有効なステートメントであるため、nilのみを出力します:)


13
すごい、さらに短い方法はセミコロンの後に次のようなオブジェクトが続くことですusers = User.all; 0
Bob

1
これは返されたオブジェクトに対してのみ機能し、pとputの機能ではありません。
the_minted 14

単なるハックであり、カウントを使用Users.all.countできます。users = User.all; Users.all.count
たとえば

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 2013

$ HOME / .irbrcに入れてみてください
hdgarrood

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

(注:もちろんオプションですが、ctx最初にgemをインストールする必要が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

出力抑制、一般

また、必要に応じて、irb / consoleだけでなく、一般的に出力の使用quietlyまたはsilence_stream抑制についても確認してください。

silence_stream(STDOUT) do
  users = User.all
end

注:quietlyRuby 2.2.0では非推奨となり、最終的には削除されます。 BenMorganIOに感謝!)

詳細については、こちらをご覧ください


1
quietlyruby 2.2.0では非推奨であり、削除されることに注意してください。
BenMorganIO 2015

@BenMorganIO回答にメモを追加しました。それをありがとう!
Joshua Pinter 2015

4
irb --simple-prompt --noecho
  • --simple-prompt -単純なプロンプトを使用する-ちょうど >>
  • --noecho -操作の結果を抑制します

3

irb内で次のコマンドを実行すると、うまくいきます。

irb_context.echo = false
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.