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

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


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"

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


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 .


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

3

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

irb_context.echo = false
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.