Ruby on rails 发送带有延迟作业的时事通讯

Ruby on rails 发送带有延迟作业的时事通讯,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,delayed-job,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,Delayed Job,我有和admin\u mailer: class AdminMailer < ActionMailer::Base def send_message_to_all_users(user, subject, body, locale) @user = user @body = body @locale = locale mail(:to => user.email, :subject => subject) end end 在我的车型中用户

我有和
admin\u mailer

class AdminMailer < ActionMailer::Base
 def send_message_to_all_users(user, subject, body, locale)
    @user = user
    @body = body
    @locale = locale
    mail(:to => user.email, :subject => subject)
  end
end
在我的车型中
用户

class User
 include Mongoid::Document
 include Mongoid::Timestamps::Created
.
.
.

#delayed jobs methods
  def self.send_message_to_all_users(user, subject, body, locale)
     AdminMailer.send_message_to_all_users(user, subject, body, locale).deliver
  end

 def deliver
  sleep 15
 end

end
用户的邮件列表
非常长,超过20000封电子邮件

我的问题是,用这种方式发送带有大邮件列表的时事通讯是否正确,或者我可以用更好的方式完成这项任务。


谢谢大家!

看看这个,如果你被锁定使用延迟作业,看看这个。cast特别针对延迟邮寄。

我认为您应该在此处查看“批量查找”方法:

在您的情况下,您可以首先批量查找所有用户,然后将每个批分配给send_email_to_all_users方法调用(用每个批替换User.all)

或者,更好的是,您可以将整个新闻稿流程移动到它自己的类中,并稍微封装它(因此,仍然从控制器调用该方法,但运行该类中的所有逻辑)


无论如何,我认为批量查找是您所需要的。

谢谢,但我使用的是
延迟作业
,添加其他后台作业是不可能的。非常感谢!
class User
 include Mongoid::Document
 include Mongoid::Timestamps::Created
.
.
.

#delayed jobs methods
  def self.send_message_to_all_users(user, subject, body, locale)
     AdminMailer.send_message_to_all_users(user, subject, body, locale).deliver
  end

 def deliver
  sleep 15
 end

end