From 02c782b5f2433bcee4fd7980babf3c34bc74c0cc Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Wed, 27 Nov 2024 00:00:12 +0000 Subject: [PATCH] Clear Rails' default backtrace filters from Sentry's backtrace cleaner In Rails 7.2, Rails's backtrace cleaner, which sentry-rails' backtrace cleaner inherits from, starts shortening gem's paths in backtraces. This will prevent sentry-ruby's `Sentry::Backtrace` from handling them correctly, which will result in issues like #2472. This commit avoids the issue by clearing the default filters that Sentry's backtrace cleaner inherits. --- sentry-rails/lib/sentry/rails/backtrace_cleaner.rb | 4 +++- sentry-rails/spec/sentry/rails_spec.rb | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sentry-rails/lib/sentry/rails/backtrace_cleaner.rb b/sentry-rails/lib/sentry/rails/backtrace_cleaner.rb index 57030f733..55ff263d9 100644 --- a/sentry-rails/lib/sentry/rails/backtrace_cleaner.rb +++ b/sentry-rails/lib/sentry/rails/backtrace_cleaner.rb @@ -11,8 +11,10 @@ class BacktraceCleaner < ActiveSupport::BacktraceCleaner def initialize super - # we don't want any default silencers because they're too aggressive + # We don't want any default silencers because they're too aggressive remove_silencers! + # We don't want any default filters because Rails 7.2 starts shortening the paths. See #2472 + remove_filters! @root = "#{Sentry.configuration.project_root}/" add_filter do |line| diff --git a/sentry-rails/spec/sentry/rails_spec.rb b/sentry-rails/spec/sentry/rails_spec.rb index 7a2f3ec15..8d4e5367f 100644 --- a/sentry-rails/spec/sentry/rails_spec.rb +++ b/sentry-rails/spec/sentry/rails_spec.rb @@ -242,6 +242,16 @@ def capture_in_separate_process(exit_code:) expect(traces.dig(-1, "function")).to be_nil end + it "makes sure BacktraceCleaner gem cleanup doesn't affect context lines population" do + get "/view_exception" + + traces = event.dig("exception", "values", 0, "stacktrace", "frames") + gem_frame = traces.find { |t| t["abs_path"].match(/actionview/) } + expect(gem_frame["pre_context"]).not_to be_empty + expect(gem_frame["post_context"]).not_to be_empty + expect(gem_frame["context_line"]).not_to be_empty + end + it "doesn't filters exception backtrace if backtrace_cleanup_callback is overridden" do make_basic_app do |config| config.backtrace_cleanup_callback = lambda { |backtrace| backtrace }