การปรับแต่งข้อยกเว้นมักไม่ใช่เรื่องที่น่ากังวลในระหว่างการพัฒนาซอฟต์แวร์ แต่หากคุณจับข้อผิดพลาดในเครื่องมือสังเกตการณ์และไม่สามารถระบุปัญหาได้อย่างถูกต้องและรวดเร็ว คุณอาจต้องการข้อมูลและรายละเอียดเพิ่มเติมเกี่ยวกับข้อยกเวนนั้น
บทความนี้จะแสดงวิธีการปรับแต่งข้อยกเว้นใน Ruby และลดปัญหาที่อาจเกิดขึ้นในอนาคตเนื่องจากขาดข้อมูลข้อผิดพลาด
ลองเริ่มกันเลย!
บันทึกข้างเคียงสั้นๆ
โพสต์นี้เป็นการพัฒนาต่อยอดจาก "Debugging in Ruby with AppSignal" เราขอแนะนำให้อ่านนั้นก่อนเพื่อภาพรวมการดีบั๊กและแนะนำข้อยกเว้นที่กำหนดเอง
วิธีจับข้อยกเว้นด้วย Ruby
Ruby มีคลาสชื่อ Exception ซึ่งคลาสการจัดการข้อผิดพลาดต่างๆ สืบทอดมาจาก ในส่วนนี้ เราจะเข้าใจโครงสร้างการไหลของข้อยกเว้นใน Ruby ก่อนที่จะสร้างข้อยกเว้นของตัวเอง
Exception เป็นคลาสข้อยกเว้นหลักใน Ruby และ rescue Exception จะจับข้อยกเว้นทั้งหมดที่สืบทอดมาจาก Exception การใช้งานนี้ไม่ใช่แนวทางปฏิบัติที่ดีที่สุดสำหรับแอปของเรา เนื่องจากจะจับข้อยกเว้นทั้งหมดที่ Ruby ใช้ภายใน
วิธีที่ง่ายที่สุดในการจับข้อยกเว้นใน Ruby คือการสร้างบล็อกโค้ด begin ... rescue เช่นตัวอย่างด้านล่าง:
เนื่องจาก Exception จะจับข้อยกเว้นทั้งหมด เราควรพยายามใช้สิ่งที่เฉพาะเจาะจงมากขึ้นเพื่อกรองและได้เฉพาะข้อผิดพลาดที่เราต้องการ ตัวอย่างหนึ่งคือคลาส StandardError ซึ่งเป็นตัวจับข้อยกเว้นมาตรฐานที่ใช้จับข้อยกเว้นที่เกี่ยวข้องกับข้อผิดพลาดโค้ดแอปพลิเคชัน โดยละเลยข้อยกเว้นภายในของ Ruby
เพื่อจับ StandardException คุณสามารถใช้ตัวอย่างด้านล่าง:
หรือหากไม่ระบุคลาสข้อยกเว้น Ruby จะคืนค่าข้อยกเว้นที่จัดการโดยคลาส StandardException
ในการสร้างข้อยกเว้นที่กำหนดเองด้วย Ruby คุณอาจจะสร้างคลาสที่สืบทอดมาจาก StandardError เราจะครอบคลุมในส่วนต่อไป
เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับข้อยกเว้นและหาคลาสที่ดีที่สุดในการสืบทอด โปรดตรวจสอบรายการข้อยกเว้นของ Ruby
เพิ่มข้อมูลเพิ่มเติมให้กับข้อยกเว้นของ Ruby
การสร้างข้อยกเว้นใหม่โดยไม่ส่งข้อมูลที่เกี่ยวข้องจะไม่ช่วยให้ดีบั๊กได้อย่างมีประสิทธิภาพ — คือการระบุและแก้ไขปัญหา คุณต้องเพิ่มรายละเอียดข้อผิดพลาด ที่นี่เราจะเห็นวิธีส่งข้อมูลจากอ็อบเจกต์ไปยังข้อยกเว้นที่กำหนดเอง
ลองสร้างข้อยกเว้นที่กำหนดเองใหม่เพื่อรับข้อมูลที่เราต้องการบันทึก ตามที่กล่าวไว้ในส่วนก่อนหน้า ข้อยกเว้นที่กำหนดเองต้องสืบทอดมาจาก StandardError
คุณสามารถใช้โปรเจกต์ Rails เรียบง่ายเพื่อทดสอบการใช้งานนี้ สร้างโฟลเดอร์ใหม่ชื่อ exceptions ภายในโฟลเดอร์ app และคลาสชื่อ custom_exception.rb ในโปรเจกต์ Rails ของคุณ
ในคลาสข้อยกเว้นนี้ เราสามารถกำหนดข้อมูลทั้งหมดที่ต้องการแสดงในบันทึก และเราใช้แอตทริบิวต์สี่อย่างสำหรับข้อมูลของเรา:
- รหัสเพื่อนับข้อยกเว้น
- ชื่อ
- ข้อความข้อมูล
- ข้อมูลภายในรายละเอียดเกี่ยวกับข้อยกเว้นที่ Ruby มอบให้แล้ว
และตอนนี้เราสร้างบล็อก begin...rescue เพื่อยก CustomException และส่งพารามิเตอร์ไปยังแอตทริบิวต์ของข้อยกเว้น
ดูมีประโยชน์ ลองดำเนินการต่อและใช้ข้อมูลนี้เพื่อปรับแต่งบันทึกข้อยกเว้น
การขยายข้อยกเว้นใน Ruby
การขยายข้อยกเว้นช่วยให้เราสามารถปรับแต่งให้เฉพาะเจาะจงและนำกลับมาใช้ใหม่ได้มากขึ้น เหมือนกับที่ Ruby มีข้อยกเว้นหลายอย่างสำหรับประเภทข้อผิดพลาดต่างๆ เราสามารถปฏิบัติตามแนวทางการเขียนโปรแกรมนี้ในระบบของเราได้เช่นกัน
ต่อไป เราจะเข้าใจวิธี override ข้อยกเว้นของเราและใช้ในบริบทที่ต้องการการขยาย
การค้นหาข้อมูลในบันทึกเป็นกิจกรรมที่ทำให้เจ็บปวด นักพัฒนาบ่อยครั้งที่โทษตัวเองที่ไม่ได้รวมข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดหรือวิธีค้นหาและกรอง หากคุณไม่ได้ใช้เครื่องมือตรวจสอบที่ให้สิ่งนี้ การรวมข้อมูลที่มีความหมายอาจช่วยคุณในอนาคต
เคล็ดลับมืออาชีพ: ดูส่วน 'Debugging Exceptions in Ruby with AppSignal' ในโพสต์ Debugging in Ruby with AppSignal สำหรับข้อมูลเกี่ยวกับวิธีตั้งค่าและติดตามข้อยกเว้นที่กำหนดเองใน AppSignal
ในตัวอย่างด้านล่าง เราจะปรับแต่งการแสดงข้อยกเว้นในบันทึก เริ่มแรกคุณอาจคิดว่ามันเป็นแค่วิธีการแสดงข้อมูลที่สวยงามและเบาๆ แต่คำสำคัญที่ใช้ในข้อมูลเป็นกุญแจสำคัญในการค้นหาข้อผิดพลาดและช่วยผู้ที่จะตรวจสอบแอปพลิเคชัน
เพิ่ม gem colorize ลงในโปรเจกต์ของคุณโดยรวมโค้ดด้านล่างใน Gemfile
รัน bundle เพื่อติดตั้ง gem colorize และเปิดแอปพลิเคชัน Rails ของคุณ
ตอนนี้ในคลาสข้อยกเว้นของคุณ ให้นำเข้า gem พิมพ์แอตทริบิวต์ในรูปแบบที่จัดรูปแบบ เพื่อให้มองเห็นง่ายและค้นหาข้อผิดพลาดสำคัญได้รวดเร็ว
ดูผลลัพธ์ของการปรับแต่งภาพนี้และทดสอบตัวเลือกบางอย่างเพื่อสร้างรูปแบบและสไตล์ของคุณเอง

สรุปและขั้นตอนต่อไป
ในโพสต์นี้ เราได้ครอบคลุมวิธีปรับแต่งและเน้นข้อยกเว้น Ruby ในบันทึกของคุณ มีการปรับแต่งอื่นๆ อีกมากมาย แต่สิ่งสำคัญที่สุดคือคุณจัดการข้อยกเว้นที่เกี่ยวข้องกับแอปพลิเคชันของคุณ และจำไว้ อย่าใช้สไตล์การจัดรูปแบบเดียวกันกับข้อยกเว้นทั้งหมด เพราะ Rails ทำแล้ว
ขอให้เขียนโค้ดสนุกสนาน!
P.S. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic และจะไม่พลาดโพสต์ใดๆ!

Brena Monteiro
ผู้เขียน אורח Brena เป็น Tech Lead ที่หลงใหลในการเป็นที่ปรึกษานักพัฒนาใหม่และมีประสบการณ์ในการพัฒนาและนำทีมที่มีประสิทธิภาพสูง เธอมีประสบการณ์ในการสร้าง API ที่ขยายได้และการรวมระหว่างบริการคลาวด์ สนใจสถาปัตยกรรมเชิงวิวัฒนาการ และเป็นนักเรียนฝึกงาน Extended Reality (XR)
บทความทั้งหมดโดย Brena Monteiro