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

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 :)


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"

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! :)


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 .


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

3

executar o seguinte no irb funciona para mim:

irb_context.echo = false
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.