web-dev-qa-db-ja.com

Rails console / irb出力を抑制する方法

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

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

コンソール/ irbのスクリーンフルを抑制する方法はありますか?

ありがとう

84
ghtn

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

例:

users = User.all; nil

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

179
intellidiot

Irb/consoleの出力を無音にする方法を探して、 austinruby.com で答えを見つけました。

沈黙irb:

conf.return_format = ""

デフォルト出力:

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

たとえば512文字に制限:

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

ここで、これを〜/ .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 outまたはそれだけで、前のモードに戻ります。

お役に立てば幸いです! :)

9
Mason Cloud

一般に出力を抑制する

また、ニーズに応じて、quietlyまたはsilence_stream irb/consoleだけでなく、一般的な出力を抑制するため:

silence_stream(STDOUT) do
  users = User.all
end

注:quietlyは、Ruby 2.2.0で廃止され、最終的には削除されます。(ありがとう BenMorganIO !)

詳細情報を見つけることができます ここ

5
Joshua Pinter

$ irb --simple-Prompt --noecho

3
user3490179

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

irb_context.echo = false
2
schpet