Utknąłem z dość dziwnym problemem.
Testowałem niektóre wpisy db na naszym serwerze produkcyjnym w Rails Console, gdzie prawie wszystkie polecenia dawały ogromną liczbę linii o / p, przez co zawieszał się kanał ssh :(
Czy istnieje sposób na powstrzymanie wyświetlania screenfulów konsoli / irb?
Dzięki
ruby-on-rails
ruby
irb
ghtn
źródło
źródło
users = User.all; 0
Users.all.count
, tylko jednego wyjścia liniowego, a jeśli chcesz przechowywać dane wyjściowe w zmiennej, możesz to zrobić w ten sposóbusers = User.all; Users.all.count
Szukając rozwiązania, jak wyciszyć wyjście irb / console, znalazłem również odpowiedź na austinruby.com :
cisza irb:
conf.return_format = ""
domyślne wyjście:
conf.return_format = "=> %s\n"
ograniczenie do np. 512 znaków:
conf.return_format = "=> limited output\n %.512s\n"
źródło
Tutaj dodaj to do swojego ~ / .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
(Uwaga: najpierw musisz zainstalować
ctx
klejnot, chociażawesome_print
jest to oczywiście opcjonalne).Teraz, gdy jesteś na dowolnej konsoli korzystającej z irb, możesz wykonać następujące czynności:
Tryb normalny:
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"}}}
... tak, właśnie tego oczekujesz.
awesome_print
tryb: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, teraz wszystko świetnie się drukuje! :)
Tryb cichy:
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>
... no, w ogóle nie ma wyjścia? Ładny.
W każdym razie możesz dodać dowolny tryb, który lubisz, a kiedy skończysz z tym trybem, po prostu
exit
wyjdź lub wróć, a wrócisz do poprzedniego trybu.Mam nadzieję, że to było pomocne! :)
źródło
uruchomienie następujących w irb działa dla mnie:
irb_context.echo = false
źródło
--simple-prompt
- Używa prostego monitu - po prostu>>
--noecho
- pomija wynik operacjiźródło
Ogólnie tłumi wyjście
Ponadto, w zależności od potrzeb, spójrz na ogólne użycie
quietly
lubsilence_stream
tłumienie wyjścia, a nie tylko w irb / console:silence_stream(STDOUT) do users = User.all end
UWAGA:
silence_stream
usunięto w Rails 5+.UWAGA:
quietly
będzie przestarzały w Rubim 2.2.0 i ostatecznie zostanie usunięty. (Dzięki BenMorganIO !)Więcej informacji można znaleźć tutaj .
Obejście dla Rails 5+.
Jak wspomniano powyżej,
silence_stream
nie jest już dostępny, ponieważ nie jest bezpieczny dla wątków. Nie ma alternatywy bezpiecznej dla wątków. Ale jeśli nadal chcesz używaćsilence_stream
i zdajesz sobie sprawę, że nie jest bezpieczny dla wątków i nie używasz go w sposób wielowątkowy, możesz ręcznie dodać go z powrotem jako inicjator.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
źródło
quietly
jest przestarzałe w Ruby 2.2.0 i zostanie usunięte.