【发布时间】:2014-02-07 03:55:11
【问题描述】:
我有 2 个模型:用户和组 每次用户加入组时,都会向该组的所有成员发送一封电子邮件。 我有一个负责在后台发送电子邮件的 Resque 工作人员。
问题如下: 我应该在 Resque 任务之前还是内部进行迭代?
Example 1 (before):
# inside controller action
@group = Group.find(params[:group_id])
@group.users.each do |user|
Resque.enqueue(EmailSender, {:user_id => user.id})
end
# inside worker
class EmailSender
@queue = :emails_queue
def self.perform(args = {})
user = User.find(args['user_id'])
Sender.send('new_member', {:user => user}).deliver
end
end
或者
Example 2 (inside):
# inside controller action
@group = Group.find(params[:group_id])
Resque.enqueue(EmailSender, {:group_id => @group.id})
# inside worker
class EmailSender
@queue = :emails_queue
def self.perform(args = {})
group = Group.find(args['group_id'])
group.users.each do |user|
Sender.send('new_member', {:user => user}).deliver
end
end
end
我应该选择示例 1 还是示例 2?
谢谢
【问题讨论】:
-
如果你拯救了整个迭代,如果其中一个迭代失败,它可能会停止整个电子邮件发送过程。那是你要的吗?也许您宁愿只挽救失败的迭代并仍然发送其他邮件
-
很有意义。感谢您的帮助
标签: ruby-on-rails ruby resque queuing