gpt4 book ai didi

ruby-on-rails - 在 Resque 任务之前或内部进行迭代?

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:08 28 4
gpt4 key购买 nike

我有 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?

谢谢

最佳答案

您应该使用示例 1(之前),原因如下:

  1. 调试更容易,因为您可以在一个地方看到所有重要的逻辑。示例 2 将一个重要功能(向组中的所有成员发送电子邮件)拆分到两个不同的地方。

  2. 它更灵活。假设您想在不同的上下文中发送相似(或相同)的电子邮件?这样,您就可以使用相同的 Resque 类,而无需创建新类。

  3. (正如另一位评论者所指出的)如果您的 Resque 类发生错误,它将重试。您可能希望它只重试一封电子邮件,而不是整批。因此,Resque 作业应该只负责发送一封电子邮件。

关于ruby-on-rails - 在 Resque 任务之前或内部进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192334/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com