Rake mailer任务仅将新闻稿发送给最后一个订阅者

问题描述 投票:0回答:1

昨晚,我发现我的rake mailer任务发送了我的时事通讯,仅将其发送给最后一个订阅者。但为什么?!我使用Heroku Scheduler执行任务。

这是我在scheduler.rake中的代码:

desc "This task is called by the Heroku scheduler add-on"
task :send_newsletter => :environment do
  if Time.now.saturday?
    NewsletterMailer.weekly_best.deliver
  end
end

这就是我在weekly_best中定义NewsletterMailer的方式:

def weekly_best
  @subscriptions = NewsletterSubscription.where(active: true)

  @plugins = Plugin.where("created_at >= ?", Date.today.beginning_of_week).where("cached_votes_up > ?", 0).order(:cached_votes_up => :desc).first(5)

  @subscriptions.each do |s|
    mail(to: s.email, from: "Great Wavelengths <[email protected]>", subject: "Weekly best gear")
  end
end

您可以看到我确实遍历了订阅的所有电子邮件地址,但是为什么它不将其发送给所有人?

希望你们能提供帮助:)

ruby-on-rails heroku rake mailer
1个回答
0
投票

NewsletterMailer.weekly_best方法将仅返回@subscriptions.each循环中的最后一封电子邮件。然后您在这一封电子邮件中呼叫deliver,这就是为什么只发送一封电子邮件的原因。

要解决此问题,您需要分别在每个邮件上调用deliver。您可以执行以下操作:

class NewsletterMailer
  def self.deliver_weekly_best
    subscriptions = NewsletterSubscription.where(active: true)
    plugins = Plugin.where(...)

    # Call deliver for each subscriber    
    subscriptions.each { |sub| weekly_best(sub, plugins).deliver } 
  end

  def weekly_best(sub, plugins)
    @plugins = plugins
    mail(to: sub.email, ...)
  end
end

然后按照您的时间表去做:

NewsletterMailer.deliver_weekly_best
© www.soinside.com 2019 - 2024. All rights reserved.