Я прочитал документацию по работникам и delayed_job и не смог точно следовать, поэтому хотел начать с некоторой стратегии и примера кода.
У меня есть контроллер, который я использую для отправки электронных писем по одному. Теперь каждый день я хочу проверять, какие электронные письма нужно отправлять за день, а затем отправлять их через heroku в виде delayed_job.
Как мне начать подходить к этому? спасибо.
Это то, что я придумаю, основываясь на ответах:
Используя гем «всякий раз», я создал следующий schedule.rb
every 1.day, :at => '4:30 am' do
heroku = Heroku::Client.new(ENV['HEROKU_USER'], ENV['HEROKU_PASS'])
heroku.set_workers(ENV['HEROKU_APP'], 1)
Contact.all.each do |contact|
contact_email = contact.email_today
unless contact.email_today == "none"
puts contact.first_name
puts contact_email.days
puts contact.date_entered
Delayed::Job.enqueue OutboundMailer.deliver_campaign_email(contact,contact_email)
end
end
heroku.set_workers(ENV['HEROKU_APP'], 0)
end
Чтобы определить, должен ли я отправлять электронное письмо сегодня или нет, я создал метод для contact.rb:
def email_today
next_event_info = self.next_event_info # invokes method for contact
next_event = next_event_info[:event]
delay = next_event_info[:delay]
if next_event.class.name == "Email" && from_today(self, next_event.days) + delay < 0 #helper from_today
return next_event
else
return "none"
end
end
Это выглядит правильно? Я занимаюсь разработкой на windows и развертываю на heroku, так что не знаю, как это проверить ... спасибо!