Как подавить выходы консоли /irb Rails
Я застрял в довольно странной проблеме.
Я тестировал некоторые записи db на нашем производственном сервере в Rails Console, где почти все команды приводили к огромному количеству строк o/p, из-за чего ssh-канал получал повешение: (
Есть ли способ подавить экран консоли /irb?
Спасибо
Ответы
Ответ 1
Вы можете добавить ; nil для всех ваших команд/операторов.
Пример:
users = User.all; nil
На самом деле irb печатает (возвращаемое) значение последнего выполненного оператора. Таким образом, в этом случае он будет печатать только нуль, поскольку nil - это последний выполненный действительный оператор:)
Ответ 2
В поисках решения, как отключить вывод irb/console, я также нашел ответ на austinruby.com:
тишина irb:
conf.return_format = ""
вывод по умолчанию:
conf.return_format = "=> %s\n"
предел, например, 512 символов:
conf.return_format = "=> limited output\n %.512s\n"
Ответ 3
Здесь добавьте это в свой ~/.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"}}}
... yep, что вы ожидаете.
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
Супрессивный вывод, в целом
Кроме того, в зависимости от ваших потребностей взгляните на использование quietly
или silence_stream
для подавления вывода в целом, а не только в irb/console:
silence_stream(STDOUT) do
users = User.all
end
ПРИМЕЧАНИЕ: quietly
будет устаревать в Ruby 2.2.0 и в конечном итоге будет удален. (Спасибо BenMorganIO!)
Более подробную информацию можно найти здесь.
Ответ 5
$irb --simple-prompt --noecho