Skip to content

ActiveRecordSubscriber fails to log most queries on Rails 8.0.3, everywhere except JRUBY #2785

@midnightmonster

Description

@midnightmonster

Issue Description

Since upgrading to sentry-ruby 6.1, instead of query logs we mostly get these:

Image

At a glance, this is because this line accesses type_casted_binds, but only in JRUBY does type_casted_binds return an Array.

Image

Everywhere else (unless one is using an unusual database adapter that overloads cache_notification_info), type_casted_binds returns a lambda, and since Proc#[] is an alias for Proc#call, the attempt to access a value by index on :57 actually calls the proc with the key as the unexpected argument.

Image

Reproduction Steps

  1. Install sentry-rails 6.1 on a Rails 8.0.3 app on MRI (with postgres, or probably almost anything)
  2. Configure Sentry.configuration.send_default_pii = true
  3. Attempt to run any normal query with at least one bound parameter, e.g., Account.where(email: "[email protected]").first

Expected Behavior

Logs query

Actual Behavior

Logs its own failure to log the query

Ruby Version

3.3.2

SDK Version

sentry-rails 6.1.0 (not sure what this is asking)

Integration and Its Version

Rails 8.0.3

Sentry Config

# config/initializers/sentry.rb
Sentry.init do |config|
  config.dsn = ENV["SENTRY_EU_DSN"]
  config.breadcrumbs_logger = [:active_support_logger, :http_logger]

  if ENV["SENTRY_LOGGING_ENABLED"]
    config.enable_logs = true
    config.enabled_patches = [:logger]
    config.rails.structured_logging.enabled = true
    config.send_default_pii = true

    config.rails.structured_logging.subscribers = {
      action_controller: Sentry::Rails::LogSubscribers::ActionControllerSubscriber,
      active_record: Class.new(Sentry::Rails::LogSubscribers::ActiveRecordSubscriber) do
        def sql(event)
          # SolidQueue database queries are too noisy
          return if event.payload[:name]&.starts_with?("SolidQueue::")
          super
        end
      end
    }
  end

  # TODO: If/when `sentry-rails` adds solid_queue or ActiveJob support for not
  # reporting exceptions from retried jobs (as it does for Sidekiq and DelayedJob),
  # use that and stop excluding `CompletedDocument::MissingFolder`
  config.excluded_exceptions += ["CompletedDocument::MissingFolder"]

  config.traces_sample_rate = 1.0
  config.traces_sampler = lambda do |context|
    true
  end

  config.profiles_sample_rate = 1.0

  config.release = ENV.fetch("HEROKU_RELEASE_VERSION", "")
end

Metadata

Metadata

Assignees

Labels

Projects

Status

Waiting for: Product Owner

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions