У меня есть 2 модели: Пользователь и группа Каждый раз, когда пользователь присоединяется к группе, электронное письмо отправляется всем членам этой группы. У меня есть работник Resque, который заботится о отправке писем в фоновом режиме.Итерация перед или внутри задачи 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?
Спасибо
Если вы спасли всю итерацию, если одна из итераций завершилась неудачей, она, вероятно, остановит весь процесс отправки электронной почты. Это то, что вы хотите? Возможно, вам лучше спасти только неудачную итерацию и отправить другие письма. – MrYoshiji
Делает большой смысл. Thx для помощи – lpdahito