rake 任务上的 ActionMailer 循环每次运行时都会发送一封额外的邮件

ActionMailer loop on rake task send an extra mail every time it runs

我想不通, 我有这个 class

class UserMailer < ActionMailer::Base
 def apps_remainder_email()
    #apps array ..which basically have 3 records in it
    apps.each do |rec||
    mail(to:  user.email, subject: 'Apps Remainder').deliver
    end
 end
end

当我尝试在 rails 控制台 UserMailer.apps_remainder_email 中调用上面的内容时,它工作正常并发送了三封电子邮件,但是当我将其添加为抽取任务时,它发送了四封而不是三封即始终是最终电子邮件的副本。

这是我的抽佣任务

task daily: [:environment] do  
 UserMailer.apps_remainder_email.deliver
end

我认为这是因为我的任务中有一个 .deliver,但如果没有那个 .deliver,根本不会发送任何邮件。

  $ rake daily --trace
    ** Invoke daily (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Execute daily

您的 UserMailer class 不应自行调用 deliver

相反,您的 rake 任务应该调用 deliver

因此从 UserMailer class 中删除 deliver 并将逻辑放入您的抽取任务中:

task daily: [:environment] do  
   apps.each do |rec||
      UserMailer.apps_remainder_email(rec).deliver
   end
end