12/08/2018, 17:44

Debug dễ dàng hơn với better_errors và binding_of_caller gem

Việc hiển thị lỗi theo trang mặc định của Rails đôi khi làm chúng ta rất khó để biết chính xác lỗi đó là gì vì rất ít thông tin được hiển thị. Vì vậy để những đoạn message error trông rõ ràng hơn thuận tiện cho việc fix bug chúng ta có thể sử dụng gem bettererrors kết hợp với bindingofcaller. ...

Việc hiển thị lỗi theo trang mặc định của Rails đôi khi làm chúng ta rất khó để biết chính xác lỗi đó là gì vì rất ít thông tin được hiển thị. Vì vậy để những đoạn message error trông rõ ràng hơn thuận tiện cho việc fix bug chúng ta có thể sử dụng gem bettererrors kết hợp với bindingofcaller.

Khởi tạo môi trường

  • Đầu tiên chúng ta tạo một ứng dụng với 2 model post và category
rails generate scaffold Category name:string description:string
rails generate scaffold Post title:string description:string category:references

  • Vậy là ta đã có model, bây giờ ta sẽ tạo một data post nhưng có giá trị category_id = nil
post = Post.new(title: "Coupe de France: Les Herbiers ont", description: "")
p.save(validate:false)

  • Tiếp theo ta tạo một lỗi trong phương thức show để xem lỗi hiển thị mặc định của Rails
  def show
    return if @post.category.empty?  # sinh ra  Exception vì data ta tạo phía trên không có category
  end

Install gem

  • Để sử dụng gem better_errors kết hợp với binding_of_caller ta thêm vào Gemfile
 gem "better_errors"
 gem "binding_of_caller"

# Nhớ chạy lại  bundle

So sánh kết quả

Bây giờ ta sẽ xem kết quả hiển thị trước và sau khi sử dụng gem

  • Ta có 2 trang hiển thị lỗi mặc định của rails
    • Hiển thị exception ta tạo ra phía trên:

  • Với @post không tồn tại

Như ta đã thấy, phần hiển thị sau khi sử dụng gem cho thấy được sự khác biệt rất lớn (rõ ràng về thông tin hiển thị lỗi, có thể tương console) giúp ta dẽ dàng trong việc tìm lỗi so với trang mặc định hiển thị lỗi của Rails ban đầu.

Link tham khảo

https://github.com/charliesome/better_errors

0