cron обычно не позволяет указывать «последний день месяца». Но в Ruby вы можете просто использовать -1
для обозначения последнего дня месяца:
Date.new(2020, 2, -1)
#=> Sat, 29 Feb 2020
Таким образом, вместо отдельных записей для определенных c дней, вы можете определить одну запись, выполняющуюся каждый день. в 8:00 и передайте дни как аргументы в задачу rake:
every '0 8 * * *' do
rake 'office:reminder[15,-1]', environment: ENV['RAILS_ENV']
end
Затем в вашей задаче вы можете превратить эти аргументы в объекты даты и проверить, равен ли какой-либо из них сегодняшняя дата:
namespace :office do
task :reminder do |t, args|
days = args.extras.map(&:to_i)
today = Date.today
if days.any? { |day| today == Date.new(today.year, today.month, day) }
# send your reminder
end
end
end