Как подавить консоль Rails / вывод IRB - PullRequest
82 голосов
/ 13 января 2011

Я застрял с довольно странной проблемой.

Я тестировал некоторые записи в БД на нашем производственном сервере в Rails Console, где почти все команды приводили к огромному количеству строк o / p из-закакой канал ssh зависал: (

Есть ли способ подавления экранов консоли / irb?

Спасибо

Ответы [ 6 ]

175 голосов
/ 13 января 2011

Вы можете добавить ;nil для всех ваших команд / операторов.

Пример:

users = User.all; nil

На самом деле irb печатает (возвращаемое) значение последнего выполненного оператора.Таким образом, в этом случае он будет печатать только nil, поскольку nil - это последний выполненный допустимый оператор:)

29 голосов
/ 25 января 2013

В поисках решения, как отключить вывод irb / console, я также нашел ответ на austinruby.com :

тишина irb:

conf.return_format = ""

вывод по умолчанию:

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

ограничение, например, до 512 символов:

conf.return_format = "=> limited output\n %.512s\n"
9 голосов
/ 08 июня 2013

Здесь, добавьте это в ваш ~ / .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, хотя 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 или выключите его, и вы вернетесь в предыдущий режим.

Надеюсь, это было полезно!:)

5 голосов
/ 12 мая 2014

Выход подавления, в целом

Также, в зависимости от ваших потребностей, обратите внимание на использование quietly или silence_stream для подавления вывода в целом, а не только в irb / console:

silence_stream(STDOUT) do
  users = User.all
end

ПРИМЕЧАНИЕ: quietly устареет в Ruby 2.2.0 и в конечном итоге будет удалено. (Спасибо BenMorganIO !)

Более подробную информацию можно найти здесь .

3 голосов
/ 03 июня 2014

$ irb --simple-prompt --noecho

2 голосов
/ 12 апреля 2018

работает следующее в IRB работает для меня:

irb_context.echo = false
...