【发布时间】:2018-03-31 16:06:21
【问题描述】:
我正在使用任务来完成后台作业。例如我在 lib/tasks 中的 remove_badges.rake 文件:
desc "Remove expired badges rake task"
task :remove_expired_badges => :environment do
message = "remove_expired_badges is running now."
HostMailer.send_system_info_mail(message).deliver_later
BadgeHost.all.each do |b|
if b.expire_at < Time.now
begin
b.destroy
puts "An expired badge successfully deleted."
host = b.host
badge = b.badge
HostMailer.send_badge_removed_email(host, badge).deliver_later
rescue
puts "Failed to destroy expired badge."
end
end
end
end
第一封邮件是给我自己的,以确保此任务正在运行。 第二封邮件是给用户通知他丢失了他的徽章。
我还有其他任务,其中一个邮件工作正常。
但在其他任务中,不会发送邮件。只有当我删除deliver_later 并使用deliver 时,才会发送邮件。
我不想使用传递,因为它会暂停直到邮件发送。
您知道有什么原因导致 Deliver_later 不能很好地处理 Rails 任务吗?
【问题讨论】:
-
不知道,我也遇到了同样的情况,使用 Deliver_now 作为临时解决方案。
标签: ruby-on-rails task actionmailer rails-activejob