Перенесите rask-задачу на следующий день, если она выпадает на воскресенье в ruby - PullRequest
0 голосов
/ 28 января 2020

Я определил грабли, которые будут запускаться 2 и 17 числа каждого месяца. Но я не хочу, чтобы эта задача выполнялась, если 2-е и 17-е выпадают на воскресенье. В этом случае задание должно выполняться на следующий день. Любая идея о том, как это может быть достигнуто, кто-нибудь?

#run this task at 8am on 17th of every month
every '0 8 17 * *' do
  rake 'money:reminder', environment: ENV['RAILS_ENV']
end


#run this task at 8am on the 2nd day of every month
every '0 8 2 * *' do
  rake 'money:reminder', environment: ENV['RAILS_ENV']
end

1 Ответ

1 голос
/ 28 января 2020

Вы можете поместить свою задачу в 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)

(источник: начало работы )

...