我想在讨论发生变化时通知粉丝。讨论有很多粉丝。 现在我在讨论课中这样做:
self.followers.each do |follower|
DiscussionMailer.delay.new_reply_notification(user, reply) unless reply.user == user
end
虽然这是异步的,但它很慢,内存很耗,并且会对redis和sidekiq产生依赖性。 如何将self.followers数组发送到mailgun或其他api并发送所有类似的电子邮件? 这是我的实际邮件方法:
def new_reply_notification(user, reply)
@user = user
@reply = reply
@reply_user = @reply.user
mail(to: user.email,
from: "arobot@gmail.com"
subject: "#{@reply_user.user_name} has just replied!")
end
所以我认为邮件方法在这里很关键。如何更改它以执行以下操作:
mail(to: followers_aray,
from: "arobot@gmail.com"
subject: "#{@reply_user.user_name} has just replied!")
对于任何宝石来说,mandrill宝石看起来都很有希望。
更新
每个人都告诉我要在工人身上这样做。虽然我同意,但我在smtp日志中注意到了这个字段:
"envelope": {
"targets": "address@gmail.com",
"transport": "",
"sender": "arobot@gmail.com"
}
所以我猜我的信封可以有任意数量的目标。如果我的smtp服务器正在完成所有工作,为什么我需要使用worker?
答案 0 :(得分:1)
在你的情况下,你应该使用sidekiq或类似的方式从队列中发送你的电子邮件,这将提高你的表现并将其转移到后台工作而不是实时工作。
更改讨论后,将所有关注者推送到队列中,然后逐个发送。
看看这里: