Skip to content

Cells + Airbrake issue - double exceptions raised #459

@asaletnik

Description

@asaletnik

Hey guys, I'm having some issue with Airbrake and Cells.

Gems used:

airbrake (7.1.0)
airbrake-ruby (2.6.0)
cells (4.1.7)
cells-haml (0.0.10)
cells-rails (0.0.8)

The problem occurs when there is exception raised within a Cell that doesn't implement a standard show method or view (named after the cell). Here's the relevant part of the stacktrace:

cells (4.1.7) lib/cell/view_model.rb:167:in `find_template'
cells (4.1.7) lib/cell/view_model.rb:109:in `render_to_string'
cells (4.1.7) lib/cell/layout.rb:23:in `render_to_string'
cells (4.1.7) lib/cell/view_model.rb:104:in `render'
cells (4.1.7) lib/cell/view_model.rb:98:in `show'
cells (4.1.7) lib/cell/view_model.rb:114:in `render_state'
cells (4.1.7) lib/cell/caching.rb:46:in `render_state'
cells (4.1.7) lib/cell/view_model.rb:92:in `call'
cells-rails (0.0.8) lib/cell/rails.rb:54:in `call'
cells (4.1.7) lib/cell/layout.rb:43:in `call'
cells (4.1.7) lib/cell/view_model.rb:125:in `to_s'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:89:in `sanitize_value'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:85:in `block in sanitize_value'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:85:in `map'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:85:in `sanitize_value'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:68:in `block in fiber_variables'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:66:in `map'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:66:in `with_object'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:66:in `fiber_variables'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filters/thread_filter.rb:42:in `call'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filter_chain.rb:47:in `block in refine'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filter_chain.rb:45:in `each'
airbrake-ruby (2.6.0) lib/airbrake-ruby/filter_chain.rb:45:in `refine'
airbrake-ruby (2.6.0) lib/airbrake-ruby/notifier.rb:126:in `send_notice'
airbrake-ruby (2.6.0) lib/airbrake-ruby/notifier.rb:50:in `notify'
airbrake (7.1.0) lib/airbrake/rack/middleware.rb:80:in `notify_airbrake'
airbrake (7.1.0) lib/airbrake/rack/middleware.rb:54:in `rescue in call'
airbrake (7.1.0) lib/airbrake/rack/middleware.rb:51:in `call'

As you can see Airbrake is picking up the exception, and it goes all the way down to here:
https://github.com/airbrake/airbrake-ruby/blob/master/lib/airbrake-ruby/filters/thread_filter.rb#L89

value passed to sanitize is the Cell that caused the exception, and calling a to_s on it makes a call on that cell here:
https://github.com/trailblazer/cells/blob/master/lib/cell/view_model.rb#L125

Now without that show method implemented on the cell, it tries to load the template by the cell name, and as it is also missing I get another Cell::TemplateMissingError exception raised, within the Airbrake methods, which prevents from reporting the original exception.

I have tried adding empty show method to my cell and it fixed the problem.

But is there any way to make the Airbrake and Cells play nicer?
I'm not always using the default show action or view...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions