From f2117ee0fd7112fd75fd9f3efab0e2f6decf9116 Mon Sep 17 00:00:00 2001 From: Jolyon Pawlyn Date: Thu, 19 Sep 2024 14:08:22 +0200 Subject: [PATCH 1/4] Add enqueue_after_transaction_commit? for Rails 7.2 compatibility --- lib/shoryuken/extensions/active_job_adapter.rb | 4 ++++ spec/shared_examples_for_active_job.rb | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/lib/shoryuken/extensions/active_job_adapter.rb b/lib/shoryuken/extensions/active_job_adapter.rb index 3a7482bc..9d69c890 100644 --- a/lib/shoryuken/extensions/active_job_adapter.rb +++ b/lib/shoryuken/extensions/active_job_adapter.rb @@ -45,6 +45,10 @@ def enqueue_at(job, timestamp) #:nodoc: enqueue(job, delay_seconds: calculate_delay(timestamp)) end + def enqueue_after_transaction_commit? + true + end + private def calculate_delay(timestamp) diff --git a/spec/shared_examples_for_active_job.rb b/spec/shared_examples_for_active_job.rb index c1f2be06..55960b61 100644 --- a/spec/shared_examples_for_active_job.rb +++ b/spec/shared_examples_for_active_job.rb @@ -277,5 +277,10 @@ class TestJob < ActiveJob::Base; end subject.enqueue_at(job, nil) end end + + describe '#enqueue_after_transaction_commit?' do + # see https://api.rubyonrails.org/classes/ActiveJob/QueueAdapters/AbstractAdapter.html#method-i-enqueue_after_transaction_commit-3F + it { expect(subject.enqueue_after_transaction_commit?).to be true } + end end # rubocop:enable Metrics/BlockLength From 71f10f06ab0d16c3179dcb29e3facfeb489f9f89 Mon Sep 17 00:00:00 2001 From: Jolyon Pawlyn Date: Thu, 19 Sep 2024 16:35:53 +0200 Subject: [PATCH 2/4] Better to inherit from ActiveJob::QueueAdapters::AbstractAdapter and the default for enqueue_after_transaction_commit? is true - see https://github.com/rails/rails/pull/51426/files#diff-572a695cc044413e9d509392a9230f9fbe8a039518f3e438a3c88f2b6a259480 --- lib/shoryuken/extensions/active_job_adapter.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/shoryuken/extensions/active_job_adapter.rb b/lib/shoryuken/extensions/active_job_adapter.rb index 9d69c890..d0629d32 100644 --- a/lib/shoryuken/extensions/active_job_adapter.rb +++ b/lib/shoryuken/extensions/active_job_adapter.rb @@ -14,7 +14,7 @@ module QueueAdapters # To use Shoryuken set the queue_adapter config to +:shoryuken+. # # Rails.application.config.active_job.queue_adapter = :shoryuken - class ShoryukenAdapter + class ShoryukenAdapter < ActiveJob::QueueAdapters::AbstractAdapter class << self def instance # https://github.com/phstc/shoryuken/pull/174#issuecomment-174555657 @@ -45,10 +45,6 @@ def enqueue_at(job, timestamp) #:nodoc: enqueue(job, delay_seconds: calculate_delay(timestamp)) end - def enqueue_after_transaction_commit? - true - end - private def calculate_delay(timestamp) From 66c00eefe2a8148bbcf32bedad13cf5057967e1b Mon Sep 17 00:00:00 2001 From: Jolyon Pawlyn Date: Mon, 30 Sep 2024 08:52:26 +0200 Subject: [PATCH 3/4] Remove test since it does not add much value and it complicates testing agaainst rails versions less than 7.2 --- spec/shared_examples_for_active_job.rb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/spec/shared_examples_for_active_job.rb b/spec/shared_examples_for_active_job.rb index 55960b61..c1f2be06 100644 --- a/spec/shared_examples_for_active_job.rb +++ b/spec/shared_examples_for_active_job.rb @@ -277,10 +277,5 @@ class TestJob < ActiveJob::Base; end subject.enqueue_at(job, nil) end end - - describe '#enqueue_after_transaction_commit?' do - # see https://api.rubyonrails.org/classes/ActiveJob/QueueAdapters/AbstractAdapter.html#method-i-enqueue_after_transaction_commit-3F - it { expect(subject.enqueue_after_transaction_commit?).to be true } - end end # rubocop:enable Metrics/BlockLength From e2fb182c90fcd8fac361e50329ded34ace868eff Mon Sep 17 00:00:00 2001 From: Jolyon Pawlyn Date: Tue, 21 Jan 2025 13:15:43 +0100 Subject: [PATCH 4/4] Attempt to fix CI ActiveJob::QueueAdapters::AbstractAdapter was only introduced in Rails 7.2.0 so let's retain compatability with older Rails versions by not referencing it --- lib/shoryuken/extensions/active_job_adapter.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/shoryuken/extensions/active_job_adapter.rb b/lib/shoryuken/extensions/active_job_adapter.rb index d0629d32..b34809dd 100644 --- a/lib/shoryuken/extensions/active_job_adapter.rb +++ b/lib/shoryuken/extensions/active_job_adapter.rb @@ -14,7 +14,7 @@ module QueueAdapters # To use Shoryuken set the queue_adapter config to +:shoryuken+. # # Rails.application.config.active_job.queue_adapter = :shoryuken - class ShoryukenAdapter < ActiveJob::QueueAdapters::AbstractAdapter + class ShoryukenAdapter class << self def instance # https://github.com/phstc/shoryuken/pull/174#issuecomment-174555657 @@ -30,6 +30,11 @@ def enqueue_at(job, timestamp) end end + # only required for Rails 7.2.x + def enqueue_after_transaction_commit? + true + end + def enqueue(job, options = {}) #:nodoc: register_worker!(job)