Запуск первого задания в первый и третий понедельник каждого месяца в ruby - PullRequest
0 голосов
/ 28 января 2020

Я определил задачу rake, но я не уверен, как я могу выполнить ее в первый и третий понедельник каждого месяца в Ruby. Пожалуйста, помогите мне.

schedule.rb

#run this task on every 1st and 3rd monday of the month

  rake 'office:reminder', environment: ENV['RAILS_ENV']

office.rake

namespace :office do
  desc "reminder emails"
  task reminder: :environment do
      PaymentReminderWorker.perform_async(arg1, arg2)
  end
end

Пожалуйста, помогите мне разобраться с этим.

Забывая первый понедельник, я думал о чем-то вроде этого.

require 'date'
Date.today.mday <= 7

Обновленный ответ (это хороший подход?)

namespace :office do
  desc "reminder emails"
  task reminder: :environment do
   today_date = DateTime.now
   first_monday = Chronic.parse("1st monday of this month", :now => today_date.to_date.beginning_of_month)
   third_monday = Chronic.parse("3rd monday of this month", :now => today_date.to_date.beginning_of_month)
   if today_date == first_monday || today_date == third_monday
     PaymentReminderWorker.perform_async(arg1, arg2)
   end
  end
end

1 Ответ

0 голосов
/ 29 января 2020

Вы можете сделать что-то вроде:

namespace :office do
  desc "reminder emails"
  task reminder: :environment do
   if (Date.today.monday?) & ((Date.today.mday.in? (1..7)) || (Date.today.mday.in? (15..22)))
     PaymentReminderWorker.perform_async(arg1, arg2)
   end
  end
end

Или просто использовать обычное задание без части даты, и в cron это будет:

every '0 0 0 ? * 2#1 *' do
  rake 'office:reminder', environment: ENV['RAILS_ENV']
end

every '0 0 0 ? * 2#3 *' do
  rake 'office:reminder', environment: ENV['RAILS_ENV']
end
...