Вы можете поместить свою задачу в ActiveJob и поставить ее в очередь для запуска позже:
# Enqueue a job to be performed tomorrow at noon.
GuestsCleanupJob.set(wait_until: Date.tomorrow.noon).perform_later(guest)
(источник: railsguide )
В вашем случае с помощью условие в будний день:
# your_class.rb
def self.reminder
if Time.current.sunday?
YourJob.set(wait_until: Date.tomorrow.noon).perform_later
else
YourJob.perform_later
end
end
# schedule.rb
#run this task at 8am on 17th of every month
every '0 8 17 * *' do
bundle exec rails runner 'YourModel.reminder'
end
#run this task at 8am on the 2nd day of every month
every '0 8 2 * *' do
bundle exec rails runner 'YourModel.reminder'
end
edit: После прочтения вашего комментария кажется, что ваш работник - работник Sidekiq. Если это так, вы можете использовать:
HardWorker.perform_in(5.minutes, 'bob', 5)
HardWorker.perform_at(5.minutes.from_now, 'bob', 5)
(источник: начало работы )