Один из вариантов - использовать gem 'delayed_job_recurring'
и настроить периодическое выполнение задания.
class ReleaseSecurityMoneyJob < Struct.new(:transaction_id)
include Delayed::RecurringJob
run_every 4.days
timezone 'Central Time (US & Canada)'
queue 'slow-jobs'
def perform
..
end
end
. Затем создайте это задание, как и вы, и оно будет исполняться блаженно каждые 4 дня.
Delayed::Job.enqueue(ReleaseSecurityMoneyJob.new(transaction_id))
Тогда в какой-то момент вы хотите закончить, просто позвоните
ReleaseSecurityMoneyJob.unschedule
Однако это приведет к отмене планирования всех заданий этого класса.Я думаю, что есть несколько вариантов, чтобы выбрать конкретную работу в зависимости от транзакции.Тебе придется немного поэкспериментировать.