Como suprimir saídas de console / irb do Rails

87

Estou preso a um problema muito estranho.

Eu estava testando algumas entradas de db em nosso servidor de produção no console Rails onde quase todos os comandos estavam resultando em um grande número de linhas o / p, devido ao qual o canal ssh estava sendo travado :(

Existe uma maneira de suprimir as telas do console / irb?

obrigado

ghtn
fonte

Respostas:

187

Você pode anexar ; nulo para todos os seus comandos / declarações.

Exemplo:

users = User.all; nil

Na verdade, o irb imprime o valor (de retorno) da última instrução executada. Portanto, neste caso, ele imprimirá apenas nil, pois nil é a última instrução válida executada :)

intelidiota
fonte
13
Incrível, uma forma ainda mais curta é o ponto-e-vírgula seguido por um objeto comousers = User.all; 0
Bob
1
Isso só funciona para objetos retornados, não funciona de p e puts.
the_minted em
é apenas um hack, você pode apenas usar a contagem, tipo Users.all.count, apenas uma saída de linha, e se você quiser armazenar a saída na variável pode ser feito assimusers = User.all; Users.all.count
Tasawar Hussain
31

Em busca de uma solução para silenciar a saída do irb / console, também encontrei uma resposta em austinruby.com :

silêncio irb:

conf.return_format = ""

saída padrão:

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

limite, por exemplo, de 512 caracteres:

conf.return_format = "=> limited output\n %.512s\n"
LarsDK
fonte
Muito útil. Alguma chance de haver uma maneira de definir isso ao abrir o console irb / rails, ou seja, alias a um parâmetro em?
Kache
Você pode tentar colocá-lo em $ HOME / .irbrc
hdgarrood
8

Aqui, adicione ao seu ~ / .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

(Observação: você deve instalar o ctxgem primeiro, embora awesome_printseja opcional, é claro.)

Agora, quando estiver em qualquer console que use irb, você pode fazer o seguinte:

Modo normal:

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"}}}

... sim, exatamente o que você espera.

awesome_print modo:

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"
        }
    }
}

... uau, agora tudo está imprimindo de forma incrível! :)

Modo silencioso:

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>

... uau, nenhuma saída? Agradável.

De qualquer forma, você pode adicionar o modo que quiser e, quando terminar de usá-lo, basta exitsair ou voltar ao modo anterior.

Espero que tenha sido útil! :)

Mason Cloud
fonte
4

Suprimir saída, em geral

Além disso, dependendo de suas necessidades, dê uma olhada em como usar quietlyou silence_streamsuprimir a saída em geral, não apenas no irb / console:

silence_stream(STDOUT) do
  users = User.all
end

NOTA: quietlyserá obsoleto no Ruby 2.2.0 e eventualmente será removido. (Obrigado BenMorganIO !)

Mais informações podem ser encontradas aqui .

Joshua Pinter
fonte
1
Note que quietlyestá obsoleto no ruby ​​2.2.0 e será removido.
BenMorganIO
@BenMorganIO Adicionou uma observação à resposta. Obrigado por isso!
Joshua Pinter
4
irb --simple-prompt --noecho
  • --simple-prompt - Usa um prompt simples - apenas >>
  • --noecho - Suprime o resultado das operações
user3490179
fonte
3

executar o seguinte no irb funciona para mim:

irb_context.echo = false
schpet
fonte