Estoy atrapado con un problema bastante extraño.
Estaba probando algunas entradas de db en nuestro servidor de producción en Rails Console donde casi todos los comandos daban como resultado una gran cantidad de líneas o / p, por lo que el canal ssh se colgaba :(
¿Hay alguna forma de suprimir las pantallas de consola / irb?
Gracias
ruby-on-rails
ruby
irb
ghtn
fuente
fuente

users = User.all; 0Users.all.count, solo una salida de línea, y si desea almacenar la salida en una variable, puede hacerlo asíusers = User.all; Users.all.countEn busca de una solución sobre cómo silenciar la salida de irb / console, también encontré una respuesta en austinruby.com :
silencio irb:
conf.return_format = ""salida predeterminada:
conf.return_format = "=> %s\n"límite a, por ejemplo, 512 caracteres:
conf.return_format = "=> limited output\n %.512s\n"fuente
Aquí, agregue esto a su ~ / .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(Nota:
ctxprimero debe instalar la gema, aunqueawesome_printes opcional, por supuesto).Ahora, cuando esté en cualquier consola que use irb, puede hacer lo siguiente:
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"}}}... sí, justo lo que esperabas.
awesome_printmodo: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" } } }... ¡guau, ahora todo se está imprimiendo increíblemente! :)
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>... whoah, no hay salida en absoluto? Agradable.
De todos modos, puede agregar el modo que desee, y cuando haya terminado con ese modo, simplemente
exitelimínelo y volverá al modo anterior.¡Espero que haya sido útil! :)
fuente
ejecutar lo siguiente dentro de irb funciona para mí:
irb_context.echo = falsefuente
--simple-prompt- Utiliza un mensaje simple, solo>>--noecho- Suprime el resultado de operacionesfuente
Supresión de salida, en general
Además, dependiendo de sus necesidades, eche un vistazo a usar
quietlyosilence_streampara suprimir la salida en general, no solo en irb / console:silence_stream(STDOUT) do users = User.all endNOTA:
silence_streameliminado en Rails 5+.NOTA:
quietlyquedará obsoleto en Ruby 2.2.0 y eventualmente se eliminará. (¡Gracias BenMorganIO !)Puede encontrar más información aquí .
Trabajar alrededor para rieles 5+.
Como se mencionó anteriormente,
silence_streamya no está disponible porque no es seguro para subprocesos. No existe una alternativa segura para subprocesos. Pero si aún desea usarlosilence_streamy sabe que no es seguro para subprocesos y no lo está usando de manera multiproceso, puede volver a agregarlo manualmente como inicializador.config/initializer/silence_stream.rb# Re-implementation of `silence_stream` that was removed in Rails 5 due to it not being threadsafe. # This is not threadsafe either so only use it in single threaded operations. # See https://api.rubyonrails.org/v4.2.5/classes/Kernel.html#method-i-silence_stream. # def silence_stream( stream ) old_stream = stream.dup stream.reopen( File::NULL ) stream.sync = true yield ensure stream.reopen( old_stream ) old_stream.close endfuente
quietlyestá obsoleto en ruby 2.2.0 y se eliminará.