Comment supprimer les sorties de la console Rails / IRB

87

Je suis coincé avec un problème assez étrange.

Je testais certaines entrées de base de données dans notre serveur de production dans Rails Console où presque toutes les commandes résultaient d'un grand nombre de lignes o / p, à cause desquelles le canal ssh était suspendu :(

Existe-t-il un moyen de supprimer les écrans de console / irb?

Merci

ghtn
la source

Réponses:

187

Vous pouvez ajouter ; nul à toutes vos commandes / déclarations.

Exemple:

users = User.all; nil

En fait, irb imprime la valeur (de retour) de la dernière instruction exécutée. Ainsi, dans ce cas, il n'imprimera que nil car nil est la dernière instruction valide exécutée :)

intellidiot
la source
13
Génial, un moyen encore plus court est le point-virgule suivi d'un objet commeusers = User.all; 0
Bob
1
Cela ne fonctionne que pour les objets retournés, pas le travail de p et met.
the_minted
c'est juste un hack, vous pouvez simplement utiliser count, comme Users.all.count, une seule sortie de ligne, et si vous voulez stocker la sortie dans une variable peut être fait comme ceciusers = User.all; Users.all.count
Tasawar Hussain
31

À la recherche d'une solution pour réduire au silence la sortie irb / console, j'ai également trouvé une réponse sur austinruby.com :

silence irb:

conf.return_format = ""

sortie par défaut:

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

limite à par exemple 512 caractères:

conf.return_format = "=> limited output\n %.512s\n"
LarsDK
la source
Très utile. Y a-t-il une chance qu'il y ait un moyen de régler cela lors de l'ouverture de la console irb / rails, c.-à-d. Alias ​​un paramètre dans?
Kache
Vous pouvez essayer de le mettre dans $ HOME / .irbrc
hdgarrood
8

Ici, ajoutez ceci à votre ~ / .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

(Remarque: vous devez d'abord installer la ctxgemme, bien que cela awesome_printsoit facultatif, bien sûr.)

Maintenant, lorsque vous êtes sur une console qui utilise irb, vous pouvez effectuer les opérations suivantes:

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

... ouais, exactement ce que vous attendez.

awesome_print mode:

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

... wow, maintenant tout s'imprime à merveille! :)

Mode silencieux:

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>

... whoah, pas de sortie du tout? Agréable.

Quoi qu'il en soit, vous pouvez ajouter le mode de votre choix, et lorsque vous en avez terminé avec ce mode, exitsortez-le, et vous serez de retour dans le mode précédent.

J'espère que cela a été utile! :)

Mason Cloud
la source
4

Supprimer la sortie, en général

Aussi, en fonction de vos besoins, jetez un œil à l'utilisation quietlyou silence_streamà la suppression de la sortie en général, pas seulement dans irb / console:

silence_stream(STDOUT) do
  users = User.all
end

REMARQUE: quietlysera obsolète dans Ruby 2.2.0 et sera finalement supprimé. (Merci BenMorganIO !)

Plus d'informations peuvent être trouvées ici .

Joshua Pinter
la source
1
Notez qu'il quietlyest obsolète dans ruby ​​2.2.0 et va être supprimé.
BenMorganIO
@BenMorganIO Ajout d'une note à la réponse. Merci pour ça!
Joshua Pinter
4
irb --simple-prompt --noecho
  • --simple-prompt - Utilise une simple invite - juste >>
  • --noecho - Supprime le résultat des opérations
user3490179
la source
3

exécuter ce qui suit dans irb fonctionne pour moi:

irb_context.echo = false
schpet
la source