Envek / Envek/after_commit_everywhere

Unexpected behaviour in ActiveJob callbacks

Open
#32 6 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.