dd-trace-rb
dd-trace-rb copied to clipboard
[BUG]: Broken Rails console after upgrading to 2.9.0
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 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?
@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
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.
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>'"]
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.