Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Nâng cao ngoại lệ Ruby với dữ liệu ngữ cảnh – Hướng dẫn thực tế

Đôi khi cặp backtrace/thông báo lỗi tiêu chuẩn không đủ. Đôi khi bạn cần thêm dữ liệu để xác định nguyên nhân gây ra lỗi. May mắn thay, việc này rất dễ dàng trong Ruby.

Tùy chỉnh thông báo lỗi

Cách đơn giản nhất để thêm thông tin ngữ cảnh vào ngoại lệ là thêm nó vào thông báo của ngoại lệ. Trong ví dụ dưới đây, tôi bắt một ngoại lệ và ném lại nó với thông báo mới:

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

Một trường hợp sử dụng tốt cho cách tiếp cận này có thể là khi bạn đang render một template. Bất kỳ ngoại lệ nào xảy ra bên trong template đều không biết tên file của template. Nhưng đó là thông tin rất quan trọng để bạn debug.

Dưới đây là ví dụ về cách bạn có thể rescue lỗi template và thêm tên file vào đầu thông báo.

filename = "mytemplate.erb" template = File.read(filename) # Chứa "<% 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 

Gói ngoại lệ (Wrapping)

Một tùy chọn khác để đưa thông tin ngữ cảnh vào ngoại lệ là tạo một ngoại lệ tùy chỉnh. Vì ngoại lệ chỉ là các class như mọi thứ khác trong Ruby, bạn có thể thêm bao nhiêu attr_accessor tùy thích.

Đây là cách thực hiện:

class 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 

Sử dụng tính năng context của Honeybadger

Tôi phải nhắc đến đây, vì Honeybadger có một cách khá hay để thêm thông tin ngữ cảnh vào ngoại lệ. Thay vì sửa đổi đối tượng ngoại lệ, bạn chỉ cần sử dụng phương thức Honeybadger.context từ bất kỳ đâu trong ứng dụng.

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

Khi ngoại lệ xảy ra, dữ liệu context sẽ được báo cáo cùng với nó. Sau đó bạn có thể xem dữ liệu đó cùng với các dữ liệu ngoại lệ khác trong ứng dụng web hoặc mobile.

Nâng cao ngoại lệ Ruby với dữ liệu ngữ cảnh – Hướng dẫn thực tế Tính năng context của Honeybadger cho phép bạn đính kèm bất kỳ thông tin nào bạn cần vào ngoại lệ mà không cần nhiều code.