Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีเพิ่มข้อมูลบริบทให้กับข้อยกเว้นใน Ruby

บางครั้งคำสั่งผสมย้อนกลับ / ข้อความแสดงข้อผิดพลาดมาตรฐานไม่เพียงพอ บางครั้งคุณต้องการข้อมูลเพิ่มเติมเพื่อค้นหาสาเหตุของข้อผิดพลาด โชคดีที่ Ruby ทำได้ง่ายมาก

การปรับแต่งข้อความแสดงข้อผิดพลาด

วิธีที่ง่ายที่สุดในการเพิ่มข้อมูลตามบริบทให้กับข้อผิดพลาดของคุณคือการเพิ่มลงในข้อความของข้อยกเว้น ในตัวอย่างด้านล่าง ฉันพบข้อยกเว้นและเพิ่มข้อความใหม่ด้วยข้อความใหม่:

begin
  raise "foo"
rescue => e
  raise e.class, "bar"
end

# RuntimeError: bar

กรณีการใช้งานที่ดีสำหรับวิธีนี้อาจเป็นเมื่อคุณกำลังแสดงเทมเพลต ข้อยกเว้นที่เกิดขึ้นภายในเทมเพลตจะไม่ทราบชื่อไฟล์ของเทมเพลต แต่นั่นเป็นข้อมูลสำคัญที่คุณต้องรู้เมื่อทำการดีบั๊ก

ต่อไปนี้คือตัวอย่างวิธีแก้ไขข้อผิดพลาดของเทมเพลตและใส่ชื่อไฟล์ไว้ข้างหน้าข้อความ

filename = "mytemplate.erb"
template = File.read(filename) # Contains "<% 1/0 %>"

e = ERB.new(template) 

begin
  e.result
rescue => e
  raise e.class, [filename, e.message].join(": ")
end

# ZeroDivisionError: mytemplate.erb: divided by 0

การตัดข้อยกเว้น

อีกทางเลือกหนึ่งสำหรับการรวมข้อมูลตามบริบทในข้อยกเว้นคือการสร้างข้อยกเว้นที่กำหนดเอง เนื่องจากข้อยกเว้นเป็นเพียงคลาสเช่นเดียวกับทุกอย่างใน Ruby คุณจึงเพิ่ม attr_accessors ได้มากเท่าที่ต้องการ

นี่คือลักษณะที่อาจมีลักษณะ:

TemplateError < StandardError
  attr_reader :filename

  def initialize(msg, filename)
    @filename = filename
    super(msg)
  end
end

begin
  ERB.new(template).result
rescue => e
  raise TemplateError.new(e.message, filename)
end

การใช้คุณลักษณะบริบทของ Honeybadger

โอเคโอเค. ฉันต้องใส่สิ่งนี้ เนื่องจาก Honeybadger มีวิธีที่ค่อนข้างลื่นไหลในการเพิ่มข้อมูลตามบริบทให้กับข้อยกเว้นของคุณ แทนที่จะแก้ไขวัตถุยกเว้น คุณเพียงแค่ใช้วิธี Honeybadger.context จากทุกที่ในแอปพลิเคชันของคุณ

class ApplicationController

  ....

  def find_current_user
    user = ...
    Honeybadger.context(user_id: user.id, user_email: user.email, user.scope: "user")
  end

end

เมื่อมีข้อยกเว้น ข้อมูลบริบทจะถูกรายงานไปพร้อมกับมัน จากนั้น คุณจะดูข้อมูลพร้อมกับข้อมูลข้อยกเว้นอื่นๆ บนเว็บหรือแอปบนอุปกรณ์เคลื่อนที่ได้

วิธีเพิ่มข้อมูลบริบทให้กับข้อยกเว้นใน Ruby คุณลักษณะบริบทของ Honeybadger ช่วยให้คุณสามารถแนบข้อมูลใดก็ได้ที่คุณต้องการกับข้อยกเว้นของคุณโดยไม่ต้องใช้โค้ดมากนัก