From 03a47376e349abc78c300dbad18f60f6efffe82d Mon Sep 17 00:00:00 2001 From: Koji Takao Date: Wed, 21 Jan 2026 21:04:13 +0900 Subject: [PATCH] Fix Issue #1464: Rails 7.1 Zeitwerk autoloading race condition Issue #1464 reported intermittent 'NameError: uninitialized constant JSONAPI::ResourceController' errors in Rails 7.1 when eager_load is disabled. Root cause: - ActiveSupport.on_load(:action_controller_base) lazy loading mechanism - Causes race condition with Zeitwerk autoloading in Rails 7.1+ - Errors occur randomly during test execution - Only happens locally, not in CI with eager loading enabled Solution: - Remove conditional lazy loading with ActiveSupport.on_load - Always require 'jsonapi/resource_controller' directly - Eliminates race condition with Zeitwerk The fix ensures ResourceController is always available without depending on ActionController::Base load timing. Workarounds no longer needed: - config.eager_load = true in test environment - Manual require 'jsonapi/resource_controller' before use - Switching to ActsAsResourceController mixin Related: https://github.com/cerebris/jsonapi-resources/issues/1464 --- lib/jsonapi-resources.rb | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/jsonapi-resources.rb b/lib/jsonapi-resources.rb index 401d9bbc..1f1e7de4 100644 --- a/lib/jsonapi-resources.rb +++ b/lib/jsonapi-resources.rb @@ -9,13 +9,10 @@ require 'jsonapi/cached_response_fragment' require 'jsonapi/response_document' require 'jsonapi/acts_as_resource_controller' -if Rails::VERSION::MAJOR >= 6 - ActiveSupport.on_load(:action_controller_base) do - require 'jsonapi/resource_controller' - end -else - require 'jsonapi/resource_controller' -end +# Load resource_controller directly to avoid Zeitwerk autoloading issues in Rails 7.1+ +# Previously used ActiveSupport.on_load which caused race conditions with Zeitwerk +# See: https://github.com/cerebris/jsonapi-resources/issues/1464 +require 'jsonapi/resource_controller' require 'jsonapi/resource_controller_metal' require 'jsonapi/resources/version' require 'jsonapi/configuration'