Fix Rails 7.1 regression: Delayed::JobWrapper not defined #30
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes #29, which can be reproduced on new Rails 7.1.1 apps in development.
The issue stems from the fact that Rails no longer loads ActiveJob at all until the first
ActiveJob::Base
class is referenced, but we defined ourDelayed::JobWrapper
class in a file that only loads after ActiveJob loads. This means that you can enqueue an ActiveJob, but the first timedelayed:work
tries to deserialize the handler, it encounters theDelayed::JobWrapper
constant before it encounters its firstActiveJob::Base
class.The fix is to pull
Delayed::JobWrapper
out into its own file inlib/
and load it whenlib/delayed.rb
loads. The class itself has no dependencies outside ofactivesupport
(delegate_missing_to
) so this is safe enough to do./no-platform