diff --git a/app/models/solid_queue/record.rb b/app/models/solid_queue/record.rb index d73e41b2..0cbfe277 100644 --- a/app/models/solid_queue/record.rb +++ b/app/models/solid_queue/record.rb @@ -6,11 +6,22 @@ class Record < ActiveRecord::Base connects_to(**SolidQueue.connects_to) if SolidQueue.connects_to - def self.non_blocking_lock - if SolidQueue.use_skip_locked - lock(Arel.sql("FOR UPDATE SKIP LOCKED")) - else - lock + class << self + def connection + if SolidQueue.connects_to.present? + role = SolidQueue.connects_to.dig(:database)&.keys&.first || :writing + connected_to(role: role) { super } + else + super + end + end + + def non_blocking_lock + if SolidQueue.use_skip_locked + lock(Arel.sql("FOR UPDATE SKIP LOCKED")) + else + lock + end end end end