У меня возникла довольно странная проблема.
Я тестировал некоторые записи db на нашем производственном сервере в Rails Console, где почти все команды приводили к огромному количеству строк o / p, из-за которых канал ssh зависал :(
Есть ли способ подавить экраны консоли / irb?
Благодарность
ruby-on-rails
ruby
irb
ghtn
источник
источник
users = User.all; 0
Users.all.count
, только одну строку вывода, и если вы хотите сохранить вывод в переменной, это можно сделать следующим образомusers = User.all; Users.all.count
В поисках решения, как заглушить вывод irb / console, я также нашел ответ на austinruby.com :
тишина irb:
conf.return_format = ""
вывод по умолчанию:
conf.return_format = "=> %s\n"
ограничение, например, 512 символов:
conf.return_format = "=> limited output\n %.512s\n"
источник
Вот добавьте это в свой ~ / .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
(Примечание:
ctx
сначала вы должны установить гем, хотяawesome_print
, конечно , это необязательно.)Теперь, когда вы находитесь на любой консоли, которая использует irb, вы можете сделать следующее:
Нормальный режим:
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"}}}
... да, именно то, что вы ожидаете.
awesome_print
Режим: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" } } }
... ого, теперь все отлично распечатывается! :)
Бесшумный режим:
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>
... ну, вообще никакого выхода? Ницца.
В любом случае, вы можете добавить любой режим, который вам нравится, и когда вы закончите с этим режимом, просто
exit
отключите его, и вы вернетесь в предыдущий режим.Надеюсь, это было полезно! :)
источник
у меня работает следующее в irb:
irb_context.echo = false
источник
--simple-prompt
- Использует простую подсказку - просто>>
--noecho
- Подавляет результат операцийисточник
Подавить выход, в целом
Кроме того, в зависимости от ваших потребностей, обратите внимание на использование
quietly
илиsilence_stream
подавление вывода в целом, а не только в irb / console:silence_stream(STDOUT) do users = User.all end
ПРИМЕЧАНИЕ:
silence_stream
удалено в Rails 5+.ПРИМЕЧАНИЕ:
quietly
будет объявлено устаревшим в Ruby 2.2.0 и в конечном итоге будет удалено. (Спасибо, BenMorganIO !)Более подробную информацию можно найти здесь .
Работа с Rails 5+.
Как упоминалось выше,
silence_stream
он больше не доступен, так как не является потокобезопасным. Нет альтернативы потокобезопасности. Но если вы все еще хотите использоватьsilence_stream
и знаете, что он не является потокобезопасным и не используете его многопоточным способом, вы можете вручную добавить его обратно в качестве инициализатора.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
источник
quietly
это устарело в ruby 2.2.0 и будет удалено.