Issue Description
sentry-rails triggers a "Prematurely executing load hooks" deprecation warning on boot with Rails 8.2 (edge). The warning is about :action_dispatch_response being loaded before application initialization completes.
The root cause is in Sentry::Railtie#extend_controller_methods (sentry-rails/lib/sentry/rails/railtie.rb:95). Inside the ActiveSupport.on_load :action_controller block, the line:
ActionController::Live.send(:prepend, Sentry::Rails::Overrides::StreamingReporter)
forces eager loading of ActionController::Live, which requires action_controller/metal/live.rb, which in turn requires action_dispatch/http/response.rb. That file calls ActiveSupport.run_load_hooks(:action_dispatch_response, ...), triggering the :action_dispatch_response load hook prematurely during the after_initialize phase.
Rails 8.2 added detection for this pattern and emits the warning.
Full Stack Trace
/activesupport/lib/active_support/lazy_load_hooks.rb:97:in 'Module#class_eval'
/activesupport/lib/active_support/lazy_load_hooks.rb:97:in 'block in ActiveSupport::LazyLoadHooks#execute_hook'
/activesupport/lib/active_support/lazy_load_hooks.rb:87:in 'ActiveSupport::LazyLoadHooks#with_execution_control'
/activesupport/lib/active_support/lazy_load_hooks.rb:92:in 'ActiveSupport::LazyLoadHooks#execute_hook'
/activesupport/lib/active_support/lazy_load_hooks.rb:78:in 'block in ActiveSupport::LazyLoadHooks#run_load_hooks'
/activesupport/lib/active_support/lazy_load_hooks.rb:77:in 'ActiveSupport::LazyLoadHooks#run_load_hooks'
/actionpack/lib/action_dispatch/http/response.rb:603:in '<module:ActionDispatch>'
/actionpack/lib/action_dispatch/http/response.rb:10:in '<main>'
/action_controller/metal/live.rb:5:in '<main>'
/sentry-rails-6.5.0/lib/sentry/rails/railtie.rb:95:in 'block in Sentry::Railtie#extend_controller_methods'
/sentry-rails-6.5.0/lib/sentry/rails/railtie.rb:92:in 'ActiveSupport::LazyLoadHooks#on_load'
/sentry-rails-6.5.0/lib/sentry/rails/railtie.rb:46:in 'block in <class:Railtie>'
Reproduction Steps
- Create a Rails 8.2 (edge/alpha) application with
sentry-rails 6.5.0
- Configure Sentry in an initializer (any config, even minimal)
- Boot the application in an environment where
Sentry.init is called (e.g. production, staging) — rails server, rails console, or any rake task
- Observe the warning in output:
:action_dispatch_response was loaded before application initialization.
Prematurely executing load hooks will slow down your boot time
and could cause conflicts with the load order of your application.
Please wrap your code with an on_load hook:
ActiveSupport.on_load(:action_dispatch_response) do
# your code here
end
The warning only appears when Sentry.initialized? is true, since the extend_controller_methods call in config.after_initialize is guarded by that check (railtie.rb:41). Environments where Sentry.init is not called (e.g. development) do not trigger the warning.
Expected Behavior
No premature load hook warning on boot. The ActionController::Live prepend should be deferred to avoid triggering early loading of ActionDispatch::Response.
Actual Behavior
The deprecation warning is emitted on every boot in environments where Sentry is initialized (server start, console, rake tasks in production/staging).
Suggested Fix
Move the ActionController::Live prepend into its own lazy load hook to avoid eagerly loading it inside :action_controller. For example:
def extend_controller_methods
require "sentry/rails/controller_methods"
require "sentry/rails/controller_transaction"
require "sentry/rails/overrides/streaming_reporter"
ActiveSupport.on_load :action_controller do
include Sentry::Rails::ControllerMethods
include Sentry::Rails::ControllerTransaction
end
ActiveSupport.on_load :action_controller do
ActionController::Live.send(:prepend, Sentry::Rails::Overrides::StreamingReporter)
end
end
Or alternatively, guard the prepend with a lazy reference that doesn't trigger autoloading until ActionController::Live is actually used.
Ruby Version
4.0.2
SDK Version
sentry-ruby 6.5.0, sentry-rails 6.5.0
Integration and Its Version
Rails 8.2.0.alpha (edge, commit 4df808965b4a)
Sentry Config
Sentry.init do |config|
config.dsn = "..."
config.breadcrumbs_logger = [:active_support_logger, :http_logger]
config.traces_sample_rate = 0.1
config.environment = Rails.env
config.enabled_environments = %w[production staging]
end
Issue Description
sentry-railstriggers a "Prematurely executing load hooks" deprecation warning on boot with Rails 8.2 (edge). The warning is about:action_dispatch_responsebeing loaded before application initialization completes.The root cause is in
Sentry::Railtie#extend_controller_methods(sentry-rails/lib/sentry/rails/railtie.rb:95). Inside theActiveSupport.on_load :action_controllerblock, the line:forces eager loading of
ActionController::Live, which requiresaction_controller/metal/live.rb, which in turn requiresaction_dispatch/http/response.rb. That file callsActiveSupport.run_load_hooks(:action_dispatch_response, ...), triggering the:action_dispatch_responseload hook prematurely during theafter_initializephase.Rails 8.2 added detection for this pattern and emits the warning.
Full Stack Trace
Reproduction Steps
sentry-rails6.5.0Sentry.initis called (e.g. production, staging) —rails server,rails console, or any rake taskThe warning only appears when
Sentry.initialized?is true, since theextend_controller_methodscall inconfig.after_initializeis guarded by that check (railtie.rb:41). Environments whereSentry.initis not called (e.g. development) do not trigger the warning.Expected Behavior
No premature load hook warning on boot. The
ActionController::Liveprepend should be deferred to avoid triggering early loading ofActionDispatch::Response.Actual Behavior
The deprecation warning is emitted on every boot in environments where Sentry is initialized (server start, console, rake tasks in production/staging).
Suggested Fix
Move the
ActionController::Liveprepend into its own lazy load hook to avoid eagerly loading it inside:action_controller. For example:Or alternatively, guard the prepend with a lazy reference that doesn't trigger autoloading until
ActionController::Liveis actually used.Ruby Version
4.0.2
SDK Version
sentry-ruby 6.5.0, sentry-rails 6.5.0
Integration and Its Version
Rails 8.2.0.alpha (edge, commit 4df808965b4a)
Sentry Config