Envek / Envek/after_commit_everywhere
Unexpected behaviour in ActiveJob callbacks
- Dominant language
- Ruby
- Stars
- 789
- Forks
- 23
- PR merge metrics
- No merged PRs in 30d
Description
Hello, thanks for all the hard work on this gem! I've been trying to use this gem to prevent ActiveJob jobs from enqueueing within transactions but have run into some unexpected behavior. If my job looks like the following:
```
class TestJob < ActiveJob::Base
before_enqueue do |job|
puts "1"
end
around_enqueue do |job, block|
puts "2"
block.call
end
include AfterCommitEverywhere
around_enqueue do |job, block|
puts "3"
after_commit { block.call }
end
around_enqueue do |job, block|
puts "4"
block.call
end
def perform; end
end
```
And I try to enqueue it from within a transaction:
```
ActiveRecord::Base.transaction do
TestJob.perform_later
end
```
It outputs `123 1234` instead of `1234` that I'm expecting. It seems like all the callbacks preceding the callback that has `after_commit` are run twice instead of once.
This is on `Rails 6.0.6.1` with `after_commit_everywhere (1.1.0)`.
Am I doing something wrong here or is this a bug in the gem?
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.