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; 0
Users.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.count
En 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:
ctx
primero debe instalar la gema, aunqueawesome_print
es 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_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" } } }
... ¡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
exit
elimínelo y volverá al modo anterior.¡Espero que haya sido útil! :)
fuente
ejecutar lo siguiente dentro de irb funciona para mí:
irb_context.echo = false
fuente
--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
quietly
osilence_stream
para suprimir la salida en general, no solo en irb / console:silence_stream(STDOUT) do users = User.all end
NOTA:
silence_stream
eliminado en Rails 5+.NOTA:
quietly
quedará 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_stream
ya no está disponible porque no es seguro para subprocesos. No existe una alternativa segura para subprocesos. Pero si aún desea usarlosilence_stream
y 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 end
fuente
quietly
está obsoleto en ruby 2.2.0 y se eliminará.