Skip to content

[BUG]: Broken Rails console after upgrading to 2.9.0 #4531

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
katiekeel opened this issue Mar 21, 2025 · 5 comments
Open

[BUG]: Broken Rails console after upgrading to 2.9.0 #4531

katiekeel opened this issue Mar 21, 2025 · 5 comments
Labels
bug Involves a bug community Was opened by a community member

Comments

@katiekeel
Copy link

katiekeel commented Mar 21, 2025

Tracer Version(s)

2.12.2

Ruby Version(s)

ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux-musl]

Relevent Library and Version(s)

pg (1.5.8)

Bug Report

Recently we upgraded our use of this gem from version 2.2.0 to 2.9.0. Afterward, we began to see a large number of errors being emitted in the Rails console on our Kubernetes runner pods, making the console unusable. Upgrading to 2.12.2 has not fixed the issue. We've had to modify our initializer and would like to know if there is a better path, or a fix could be looked at.

Any advice would be welcome.

Reproduction Code

rails c

Configuration Block

To fix this, we had to wrap our entire Datadog.configure do initializer with the following:

unless Rails.const_defined?(:Console) && !Rails.env.local?

Error Logs

Sample error, being repeated many times for every entry into the console prompt:

[2025-03-20T12:31:07.824170 #17] ERROR -- datadog: [datadog] (/usr/local/bundle/gems/datadog-2.12.2/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in 'rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x00007f7c5f841€20>

Followed by

W, [2025-03-20T12:31:07.824661 #17] WARN -- datadog: [datadog] Sql comment propagation with 'full' mode is aborted, because tracing is disabled. Please set 'Datadog.configuration.tracing.enabled= true' to continue.

Operating System

x86_64-linux-musl

How does Datadog help you?

No response

@katiekeel katiekeel added bug Involves a bug community Was opened by a community member labels Mar 21, 2025
@p-datadog
Copy link
Member

@katiekeel I created a new rails 7.1 application and I am not getting these messages with dd-trace-rb 2.12.2. Can you try that?

@y9v
Copy link
Member

y9v commented Apr 9, 2025

@katiekeel are you using console1984 gem by any chance?

I think this error might actually happen because it freezes Rails classes that datadog gem attempts to patch:
https://github.com/basecamp/console1984/blob/02b1b9ee7fd7050174b6a98c2b43057553621dc4/lib/console1984/freezeable.rb#L42

@p-datadog
Copy link
Member

I reproduced with console1984 following the setup instructions at https://github.com/basecamp/console1984/tree/02b1b9ee7fd7050174b6a98c2b43057553621dc4 + setting CONSOLE_USER:

CONSOLE_USER=x be rails c -e production
I, [2025-04-09T12:36:32.029041 #659]  INFO -- datadog: [datadog] DATADOG CONFIGURATION - CORE - {"date":"2025-04-09T16:36:32Z","os_name":"x86_64-pc-linux","version":"2.14.0","lang":"ruby","lang_version":"3.3.4","env":null,"service":"rails","dd_version":null,"debug":false,"tags":null,"runtime_metrics_enabled":false,"vm":"ruby-3.3.4","health_metrics_enabled":false,"profiling_enabled":false,"dynamic_instrumentation_enabled":false}
I, [2025-04-09T12:36:33.096538 #659]  INFO -- datadog: [datadog] DATADOG CONFIGURATION - CORE - {"date":"2025-04-09T16:36:33Z","os_name":"x86_64-pc-linux","version":"2.14.0","lang":"ruby","lang_version":"3.3.4","env":null,"service":"rails","dd_version":null,"debug":false,"tags":null,"runtime_metrics_enabled":false,"vm":"ruby-3.3.4","health_metrics_enabled":false,"profiling_enabled":false,"dynamic_instrumentation_enabled":false}
I, [2025-04-09T12:36:34.325694 #659]  INFO -- datadog: [datadog] DATADOG CONFIGURATION - CORE - {"date":"2025-04-09T16:36:34Z","os_name":"x86_64-pc-linux","version":"2.14.0","lang":"ruby","lang_version":"3.3.4","env":null,"service":"rails_mini","dd_version":null,"debug":false,"tags":null,"runtime_metrics_enabled":false,"vm":"ruby-3.3.4","health_metrics_enabled":false,"profiling_enabled":false,"dynamic_instrumentation_enabled":false}


You have access to production data here. That's a big deal. As part of our promise to keep customer data safe and private, we audit the commands you type here. Let's get started!



Commands:

* decrypt!: enter unprotected mode with access to encrypted information

x, why are you using this console today?

a
E, [2025-04-09T12:36:38.143667 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.145045 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.146209 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.147785 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.149494 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.150314 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.151764 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.152939 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.154748 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.156780 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.158185 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.158811 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.159784 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.159994 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.161020 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.192076 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.193507 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.196424 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.197999 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.220352 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.220622 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
E, [2025-04-09T12:36:38.221996 #659] ERROR -- datadog: [datadog] (/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:72:in `rescue in on_start') You can't invoke instance_variable_get on #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000071c6f00da010>
Loading production environment (Rails 7.1.5.1)
Ignoring datadog-2.14.0 because its extensions are not built. Try: gem pristine datadog --version 2.14.0
irb(main):001> 

Note that there is more output than just the instance_variable_get complaint.

@p-datadog
Copy link
Member

Stack trace:

["/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/freezeable.rb:42:in `block in prevent_sensitive_method'",
 "/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/utils.rb:53:in `connection_config'",
 "/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_record/events/sql.rb:34:in `on_start'",
 "/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb:125:in `call'",
 "/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb:125:in `run'",
 "/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb:90:in `start_span'",
 "/home/w/apps/dd-trace-rb/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb:34:in `start'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:159:in `block in start'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:26:in `block in iterate_guarding_exceptions'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:25:in `each'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:25:in `iterate_guarding_exceptions'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:125:in `each'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:158:in `start'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:249:in `block in start'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:26:in `block in iterate_guarding_exceptions'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:25:in `each'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:25:in `iterate_guarding_exceptions'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/fanout.rb:248:in `start'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/notifications/instrumenter.rb:56:in `instrument'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:1142:in `log'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `raw_execute'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:521:in `internal_execute'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:110:in `commit_db_transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:400:in `commit'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:514:in `block in commit_transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:503:in `commit_transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:565:in `block in within_new_transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:532:in `within_new_transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:344:in `transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/transactions.rb:212:in `transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/associations/collection_association.rb:314:in `transaction'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/associations/collection_association.rb:355:in `_create_record'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/associations/has_many_association.rb:147:in `_create_record'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/associations/association.rb:211:in `create!'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5.1/lib/active_record/associations/collection_proxy.rb:366:in `create!'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/sessions_logger/database.rb:10:in `block in start_session'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/sessions_logger/database.rb:65:in `ensure_connected'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/sessions_logger/database.rb:57:in `block (2 levels) in silence_logging_and_ensure_connected'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/logger_silence.rb:18:in `block in silence'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/logger_thread_safe_level.rb:45:in `log_at'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/logger_silence.rb:18:in `silence'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/sessions_logger/database.rb:56:in `block in silence_logging_and_ensure_connected'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/logger_silence.rb:18:in `block in silence'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/logger_thread_safe_level.rb:45:in `log_at'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5.1/lib/active_support/logger_silence.rb:18:in `silence'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/sessions_logger/database.rb:55:in `silence_logging_and_ensure_connected'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/sessions_logger/database.rb:8:in `start_session'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/supervisor.rb:61:in `start_session'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/supervisor.rb:25:in `start'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/console1984-0.2.2/lib/console1984/engine.rb:24:in `block in <class:Engine>'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/railtie.rb:273:in `block in run_console_blocks'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/railtie.rb:298:in `each'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/railtie.rb:298:in `each_registered_block'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/railtie.rb:273:in `run_console_blocks'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/application.rb:606:in `block in run_console_blocks'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/engine/railties.rb:15:in `each'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/engine/railties.rb:15:in `each'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/application.rb:606:in `run_console_blocks'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/engine.rb:456:in `load_console'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/commands/console/console_command.rb:32:in `initialize'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/commands/console/console_command.rb:16:in `new'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/commands/console/console_command.rb:16:in `start'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/commands/console/console_command.rb:106:in `perform'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/command/base.rb:178:in `invoke_command'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/command/base.rb:73:in `perform'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/command.rb:71:in `block in invoke'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/command.rb:149:in `with_argv'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/command.rb:69:in `invoke'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5.1/lib/rails/commands.rb:18:in `<main>'",
 "/home/w/.rbenv/versions/3.3.4/lib/ruby/3.3.0/bundled_gems.rb:74:in `require'",
 "/home/w/.rbenv/versions/3.3.4/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'",
 "/home/w/.cache/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'",
 "bin/rails:4:in `<main>'"]

@p-datadog
Copy link
Member

The offending call is this: https://github.com/DataDog/dd-trace-rb/blob/master/lib/datadog/tracing/contrib/active_record/utils.rb#L52-L53

It retrieves AR adapter configuration.

Patch to dd-trace-rb to make the complaint go away:

--- a/lib/datadog/tracing/contrib/active_record/utils.rb
+++ b/lib/datadog/tracing/contrib/active_record/utils.rb
@@ -49,11 +49,14 @@ module Datadog
                      connection_from_id(connection_id)
                    end
 
-            if conn && conn.instance_variable_defined?(:@config)
-              conn.instance_variable_get(:@config)
-            else
-              EMPTY_CONFIG
+            unless conn.respond_to?(:_datadog_config)
+              class << conn
+                def _datadog_config
+                  @config
+                end
+              end
             end
+            conn._datadog_config || EMPTY_CONFIG
           end
 
           # DEV: JRuby responds to {ObjectSpace._id2ref}, despite raising an error

Based on this patch, I don't really see what console1984 is trying to accomplish by preventing calls to instance_variable_get since the same information can be trivially obtained by defining an accessor method.

Another question is why dd-trace-rb needs all this information - I am not yet sure why the database host and port are needed but adapter name is used for determining dd-trace-rb configuration and, probably, it is also included in the trace. However it should be possible to obtain adapter name in a different way (such as from the adapter class name), not by inspecting database configuration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Involves a bug community Was opened by a community member
Projects
None yet
Development

No branches or pull requests

3 participants