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

มีอะไรใหม่ใน Honeybadger Gem v3

TLDR:สำหรับหัวข้อย่อย ให้ดูที่ CHANGELOG

ฉันเพิ่งส่งการอัปเดตหลักล่าสุดไปยัง gem ของเราเพื่อรายงานข้อยกเว้นใน Ruby แม้ว่า v2release เป็นการเขียนใหม่ทั้งหมดซึ่งรวมถึงกลยุทธ์การกำหนดค่าใหม่ v3 มีการเปลี่ยนแปลงที่แตกหักน้อยกว่า แต่มีการปรับปรุงคุณสมบัติและการใช้งานมากมาย มีหลายสิ่งให้พูดถึง ดังนั้นฉันจะลงมือทันที ขอให้สนุก!

โหมดรูบี้ธรรมดา

ในโลกของ Rails เป็นที่คาดหวังอย่างมากว่าเมื่อคุณติดตั้งอัญมณี มันจะรวมเข้ากับแอปพลิเคชันของคุณโดยอัตโนมัติ ตัวอย่างเช่น gemsprovide ownRailtie เพื่อรันโค้ดของตัวเองเมื่อ Rails เริ่มต้น

อัญมณีฮันนีแบดเจอร์รวบรวมแนวทางดังกล่าวอย่างเต็มที่ ทำให้ง่ายต่อการตั้งค่าการรายงานข้อผิดพลาดที่ครอบคลุมสำหรับ Rails, Sinatra, Sidekiq และอัญมณีและเฟรมเวิร์กยอดนิยมอื่นๆ จำนวนหนึ่ง เรียบง่ายเหมือน require 'honeybadger' .

Rubyists บางคนชอบที่จะรวมการผสานรวมของตนเอง Monkeypatching (ซึ่งเกิดขึ้นมากมายในRails) ทำให้พวกเขาเดือดดาล และสิ่งสุดท้ายที่พวกเขาต้องการคือให้อัญมณีเปลี่ยนแอปพลิเคชันด้วยวิธีที่ไม่ชัดเจนเพียงแค่ต้องการ ฉันเข้าใจอย่างถ่องแท้ (อันที่จริง ฉันมักจะมุ่งไปสู่กรอบความคิดนั้นเอง)

คนอื่นอาจไม่ได้ใช้ไลบรารีใด ๆ ที่เราผสานรวมและค่อนข้างจะรายงานข้อผิดพลาดด้วยตนเองโดยใช้ Honeybadger.notify เพื่อหลีกเลี่ยงการเริ่มต้นโดยไม่จำเป็นขณะรันไทม์

นั่นเป็นเหตุผลที่ฉันเพิ่มโหมด "Plain ol' Ruby" (ชื่ออย่างไม่เป็นทางการ) หากคุณเป็นหนึ่งในพวกเราที่ชอบเขียนการกำหนดค่าและติดตั้งมิดเดิลแวร์ตั้งแต่เริ่มต้น (หรือคุณแค่ใช้ Ruby ธรรมดา) ตอนนี้คุณสามารถ require 'honeybadger/ruby' แทน require 'honeybadger' . ตอนนี้คุณสามารถใช้Honeybadger.notify , Honeybadger.context ฯลฯ โดยไม่มีการเปิดใช้งานการรวมอัตโนมัติ:มีการติดตามข้อผิดพลาดน้อยที่สุดและคาดเดาได้สำหรับ Ruby:

require 'honeybadger/ruby'

begin
  # Failing code
rescue => exception
  Honeybadger.notify(exception)
end

ตัวแทนหลายราย

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

OtherBadger = Honeybadger::Agent.new

OtherBadger.configure do |config|
  config.api_key = 'project api key'
end

begin
  # Failing code
rescue => exception
  OtherBadger.notify(exception)
end

การกลับมาของ Honeybadger.configure

ก่อนอื่น หากคุณใช้ honeybadger.yml เพื่อกำหนดค่าอัญมณีในขณะนี้ ไม่ต้องกังวล -- ไม่มีอะไรเปลี่ยนแปลง และยังคงเป็นค่าเริ่มต้น!

ที่กล่าวว่า เรามีลูกค้าที่พลาดความสามารถในการกำหนดค่าอัญมณีโดยทางโปรแกรมจาก Ruby ใน v3.0 คุณจะได้รับสิ่งที่ดีที่สุดจากทั้งสองโลก:เรายังคงสนับสนุนการกำหนดค่าแบบเต็มผ่าน honeybadger.yml และตัวแปรสภาพแวดล้อมและได้เพิ่มกลับ Honeybadger.configure :

Honeybadger.configure do |config|
  config.api_key = 'project api key'
  config.exceptions.ignore += [CustomError]
end

ลำดับความสำคัญสำหรับการกำหนดค่าคือ YAML -> ENV -> Ruby หมายความว่าตัวแปรสภาพแวดล้อมจะแทนที่ honeybadger.yml และ Honeybadger.configure willoverride ตัวแปรสภาพแวดล้อม

รายงานข้อผิดพลาดในงาน cron และโปรแกรมบรรทัดคำสั่ง

หนึ่งในปัญหาที่มีมายาวนานของ cron คือคุณลักษณะอีเมลอัตโนมัติไม่เข้าใจผลลัพธ์ของข้อผิดพลาด แน่นอนว่าจะส่งอีเมลถึงคุณหากงานล้มเหลว แต่จะส่งอีเมลถึงคุณด้วยเมื่องานที่ประสบความสำเร็จของคุณเกิดขึ้นเพื่อสร้างผลลัพธ์มาตรฐาน

เฮ้ อย่าใช้ Honeybadger เพื่อให้ น้อยลง การแจ้งเตือนทางอีเมลที่ไม่สามารถดำเนินการได้จะดีหรือไม่ ถ้าคุณสามารถใช้ Honeybadger เพื่อรายงานความล้มเหลวของ cron แทนหรือเพิ่มเติมจากอีเมล ตอนนี้คุณทำได้

เราได้เพิ่ม honeybadger exec คำสั่ง CLI ของเรา (Command Line Interface) เพื่อจัดการกับการรายงานความล้มเหลวของ cron เช่นเดียวกับใดๆ คำสั่งที่คุณดำเนินการตามปกติผ่านทางบรรทัดคำสั่ง นั่นหมายถึง bash script, executables, make งาน ฯลฯ หากต้องการใช้งาน เพียงเพิ่ม honeybadger exec ก่อนคำสั่งใดๆ:

$ honeybadger exec my-command --my-flag

หากคำสั่งดำเนินการสำเร็จ คำสั่งจะออกด้วยรหัส 0 และไม่มีเอาต์พุต (แม้มาตรฐานออกจะถูกปิดใช้งานตามค่าเริ่มต้น แต่คุณสามารถเปิดใช้งานได้ด้วยแฟล็กพิเศษ) อย่างไรก็ตาม หากคำสั่งล้มเหลว คุณจะได้รับการแจ้งเตือน Honeybadger ซึ่งรวมถึงคำสั่งที่เรียกใช้และผลลัพธ์ทั้งหมด

เพราะ honeybadger exec ปิดเสียงเอาต์พุตทั้งหมดตามค่าเริ่มต้นสำหรับคำสั่งที่ประสบความสำเร็จ ซึ่งจะมีประโยชน์อย่างยิ่งกับคุณลักษณะอีเมลของ cron โดยใช้ทั้งhoneybadger exec และ อีเมล cron คุณจะได้รับการแจ้งเตือนของ Honeybadger เมื่อคำสั่งล้มเหลว หากการแจ้งเตือนของ Honeybadger ล้มเหลวด้วยเหตุผลบางอย่าง (เช่น เนื่องจากปัญหาการเชื่อมต่อ) ระบบจะดัมพ์เอาต์พุตจากคำสั่งเดิม และ cron จะยังคงส่งอีเมลถึงคุณเกี่ยวกับความล้มเหลว

รายงานข้อผิดพลาดที่กำหนดเองจากบรรทัดคำสั่ง

อันนี้ค่อนข้างง่าย ต้องการส่งการแจ้งเตือน Honeybadger แบบกำหนดเองจากสคริปต์ abash (หรือเชลล์ใด ๆ ) หรือไม่? ใช้ honeybadger notify :

$ honeybadger notify --message "This is an error from the command line"

คุณสามารถใช้แฟล็กที่ไม่บังคับ เช่น --class , --ส่วนประกอบ , --action ฯลฯ เพื่อเพิ่มคุณสมบัติเพิ่มเติมในการแจ้งเตือน

การปรับปรุงอื่นๆ

เราได้เพิ่มฟีเจอร์และการปรับปรุงเพิ่มเติมใน v3:

  • Honeybadger.notify ตอนนี้ยอมรับอาร์กิวเมนต์สตริงนอกเหนือจากข้อยกเว้น ดังนั้นคุณสามารถทำ Honeybadger.notify("these are not the badgers you're looking for") .
  • เมื่ออยู่ในที่เก็บ git การแก้ไข git จะถูกรายงานโดยอัตโนมัติโดยมีข้อยกเว้น การแก้ไขสามารถเพิ่มหรือเปลี่ยนแปลงได้ด้วยตนเองด้วย new:revision ตัวเลือกการกำหนดค่า
  • อินเทอร์เฟซผู้ใช้ของ CLI เป็นมิตรกับผู้ใช้มากขึ้นด้วยข้อความแสดงข้อผิดพลาดแบบละเอียด และอาจใช้เป็นไฟล์เรียกทำงานแบบสแตนด์อโลนได้ (นอก Rails)
  • ชุดทดสอบเร็วขึ้นประมาณ 10 เท่า ซึ่งหมายความว่าเราสามารถพัฒนาคุณลักษณะและการผสานการทำงานใหม่ๆ ได้เร็วขึ้น
  • ขณะนี้ตัวกรองข้อมูลคำขอใช้กลยุทธ์การจับคู่โดยใช้สัญลักษณ์แทนเป็นค่าเริ่มต้น ดังนั้น หากคุณกรอง "รหัสผ่าน" พารามิเตอร์คำขอ "รหัสผ่าน" และ "password_confirmation" จะถูกกรองทั้งคู่ (นี่คือวิธีการทำงานของตัวกรอง Rails)

การเปลี่ยนแปลงและการนำออก

เรายังได้ทำการเปลี่ยนแปลงและลบคุณลักษณะบางอย่างที่ไม่สมเหตุสมผลอีกต่อไป:

  • เรายกเลิกการรองรับ Ruby 1.9.3 และ 2.0.x; ต่อจากนี้ไป 2.1.0 จะเป็นเวอร์ชันต่ำสุดที่รองรับอย่างเป็นทางการ
  • เราได้นำการเลิกใช้งานทั้งหมดออกจาก v2 แล้ว
  • นำเมตริกที่เลิกใช้แล้วและโค้ดติดตามออกแล้ว
  • Honeybadger.start ไม่จำเป็นอีกต่อไป (และจะยกข้อยกเว้น ifused) หากก่อนหน้านี้คุณใช้ Honeybadger นอก Rails คุณสามารถใช้Honeybadger.configure เพื่อกำหนดค่าตัวแทนโดยไม่ต้องสร้างHoneybadger::Config . แยกต่างหาก อินสแตนซ์หรือโทร Honeybadger.start .
  • เราเปลี่ยนชื่อ plugins.skip ตัวเลือก skipped_pluggins และsidekiq.use_component ตอนนี้ true โดยค่าเริ่มต้น
  • ขณะนี้ตัวแปร CGI อยู่ในรายการที่อนุญาตพิเศษ ดังนั้นจึงทำให้ข้อมูลที่ละเอียดอ่อนรั่วไหลโดยไม่ได้ตั้งใจได้ยากขึ้น
  • กำลังพัฒนา Honeybadger.notify วิธีการตอนนี้ทำให้เกิดข้อยกเว้นเมื่อถูกเรียกโดยไม่มีอาร์กิวเมนต์ที่ถูกต้อง ในการผลิตจะบันทึกข้อผิดพลาด
  • ข้อผิดพลาดเมื่อประเมิน honeybadger.yml ตอนนี้ถูกยกขึ้นแทนการบันทึก ช่วยในการระบุปัญหาการกำหนดค่าก่อนหน้านี้ นอกจากนี้ การติดตามข้อผิดพลาดภายในแท็ก ERB ยังได้รับการปรับปรุงเพื่อให้แก้ไขข้อผิดพลาดได้ง่ายขึ้น