Как поставить в очередь доставку почты, используя задачи rake в ruby ​​on rails? - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь планировать доставку электронной почты , используя всякий раз и задачу rake

every 1.month, at: 'start of the month at 4am' do
  rake "reports:deliver_reports"
end

Внутри моей задачи rake , я использую класс для ставить в очередь все доставки электронной почты :

# reports.rake
namespace :reports do
  # rake reports:deliver_reports
  desc "Send reports to users"
  task deliver_reports: :environment do 
    QueueReportsService.call
  end
end

А внутри этого класса я ставлю в очередь каждую доставку электронной почты.

class QueueReportsService
  def self.call
    users = User.all
    users.each { |user| ReportMailer.report(user).deliver_later }
  end
end

На основе вопрос и ответы на него ранее размещенные на SO Я понимаю, что:

Сам Rails предоставляет только систему очередей в процессе, которая сохраняет задания только в RAM .

И это:

... Использование асинхронной очереди из задачи Rake (... для отправки электронной почты с использованием .deliver_later) обычно не будетработать , потому что Rake, скорее всего, закончится, вызывая удаление пула потоков в процессе ...

Я знаю, что вместо deliver_later используется deliverбудет отправлять электронные письма.

class QueueReportsService
  def self.call
    users = User.all
    users.each { |user| ReportMailer.report(user).deliver }
  end
end

Однако Если по какой-либо причине задача rake прерывается, каждое последующее электронное письмо не будет отправлено. Я бы хотел предотвратить это , запланировав отдельную работу для каждого пользователя электронной почты , которая, если что-то пойдет не так, потерпит неудачу в изоляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...