Saya terjebak dengan masalah yang cukup aneh.
Saya menguji beberapa entri db di server produksi kami di Rails Console di mana hampir semua perintah menghasilkan sejumlah besar jalur output daya, yang menyebabkan saluran ssh digantung :(
Apakah ada cara untuk menekan screenfuls konsol / irb?
Terima kasih
ruby-on-rails
ruby
irb
ghtn
sumber
sumber
users = User.all; 0
Users.all.count
, hanya satu baris keluaran, dan jika Anda ingin menyimpan keluaran dalam variabel dapat dilakukan seperti iniusers = User.all; Users.all.count
Dalam mencari solusi bagaimana membungkam keluaran irb / konsol, saya juga menemukan jawaban di austinruby.com :
diam irb:
conf.return_format = ""
keluaran default:
conf.return_format = "=> %s\n"
batas hingga misalnya 512 karakter:
conf.return_format = "=> limited output\n %.512s\n"
sumber
Di sini, tambahkan ini ke ~ / .irbrc Anda:
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
(Catatan: Anda harus menginstal
ctx
permata terlebih dahulu, meskipunawesome_print
opsional, tentu saja.)Sekarang ketika Anda berada di konsol mana pun yang menggunakan irb, Anda dapat melakukan hal berikut:
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"}}}
... ya, persis seperti yang Anda harapkan.
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, sekarang semuanya dicetak dengan luar biasa! :)
Mode diam:
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, tidak ada keluaran sama sekali? Bagus.
Bagaimanapun, Anda dapat menambahkan mode apa pun yang Anda suka, dan ketika Anda selesai dengan mode itu, baru
exit
keluar atau itu, dan Anda akan kembali ke mode sebelumnya.Semoga bermanfaat! :)
sumber
menjalankan yang berikut dalam irb berfungsi untuk saya:
irb_context.echo = false
sumber
--simple-prompt
- Menggunakan prompt sederhana - hanya>>
--noecho
- Menekan hasil operasisumber
Tekan Output, Secara Umum
Juga, tergantung pada kebutuhan Anda, lihat menggunakan
quietly
atausilence_stream
untuk menekan keluaran secara umum, tidak hanya di irb / konsol:silence_stream(STDOUT) do users = User.all end
CATATAN:
silence_stream
dihapus di Rails 5+.CATATAN: tidak
quietly
akan digunakan lagi di Ruby 2.2.0 dan pada akhirnya akan dihapus. (Terima kasih BenMorganIO !)Informasi lebih lanjut dapat ditemukan di sini .
Bekerja untuk Rails 5+.
Seperti disebutkan di atas,
silence_stream
tidak lagi tersedia karena tidak aman untuk utas. Tidak ada alternatif yang aman untuk benang. Tetapi jika Anda masih ingin menggunakansilence_stream
dan menyadari bahwa ini bukan thread safe dan tidak menggunakannya secara multithread, Anda dapat menambahkannya kembali secara manual sebagai penginisialisasi.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
sumber
quietly
tidak digunakan lagi di ruby 2.2.0 dan akan dihapus.