Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix loading all Tasks with namespace collision
After upgrading from Rails 7 to 7.1, we started seeing an error when trying to load the Maintenance Task UI: ``` undefined method `instance_of?` for #<BasicObject:... > ``` We ended up identifying the BasicObject as PRIMARY_KEY_NOT_SET, which was added to Active Record in 7.1. The reason for attempting to load this constant was that we have a model in our app named Maintenance which inherits from ActiveRecord::Base, and so all of the constants below ActiveRecord::Base get loaded by load_constants. (This clearly isn't a common case, nor something I would recommend other applications do). To fix this, we can use the Rails application's loader to load all of the application's tasks instead of traversing the constant tree. This approach has multiple benefits: - it will only load constants managed by the application's loader (which is the intention anyway) - load_constants will be faster in production because the loader will recognize that the namespace has already been loaded and so will not have to traverse the tree Since `#eager_load_namespace` was introduced in Zeitwerk 2.6.2 but the minimum required by Rails is 2.6, the higher minimum version was added to the gemspec as well.
- Loading branch information