ฉันติดอยู่กับปัญหาแปลก ๆ
ฉันกำลังทดสอบรายการ db ในเซิร์ฟเวอร์การผลิตของเราใน Rails Console ซึ่งคำสั่งเกือบทั้งหมดส่งผลให้มีบรรทัด o / p จำนวนมากเนื่องจากช่อง ssh กำลังถูกแขวนคอ :(
มีวิธีระงับหน้าจอคอนโซล / irb หรือไม่?
ขอบคุณ
ฉันติดอยู่กับปัญหาแปลก ๆ
ฉันกำลังทดสอบรายการ db ในเซิร์ฟเวอร์การผลิตของเราใน Rails Console ซึ่งคำสั่งเกือบทั้งหมดส่งผลให้มีบรรทัด o / p จำนวนมากเนื่องจากช่อง ssh กำลังถูกแขวนคอ :(
มีวิธีระงับหน้าจอคอนโซล / irb หรือไม่?
ขอบคุณ
คำตอบ:
คุณสามารถผนวก; ไม่มีคำสั่ง / คำสั่งของคุณทั้งหมด
ตัวอย่าง:
users = User.all; nil
จริงๆแล้ว irb พิมพ์ค่า (ส่งคืน) ของคำสั่งที่ดำเนินการล่าสุด ดังนั้นในกรณีนี้มันจะพิมพ์เฉพาะ nil เนื่องจาก nil เป็นคำสั่งที่ถูกต้องสุดท้ายที่ดำเนินการ :)
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
irb --simple-prompt --noecho
--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 !)
ข้อมูลเพิ่มเติมสามารถพบได้ที่นี่
ดังที่ได้กล่าวมาแล้ว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 และกำลังจะถูกลบออก
users = User.all; 0