1

私は持っていますadmin_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

コントローラーユーザーに対する私のアクションの中で:

def send_email_to_all_users

   users = User.all
   subject = params[:subject]
   body = params[:body]
   locale = params[:locale]
   for user in users
    User.delay(queue: "Email", priority: 20).send_message_to_all_users(user, subject, body, locale)
   end

   respond_to do |format|
    .........
   end
end

私のモデルではUser

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

のメーリング リストはusers、20,000 通を超える非常に長いアカウントです。

私の質問は、大きなメーリング リストでニュースレターを送信するこの方法が正しいかどうか、またはこのタスクをより良い方法で行うことができるかどうかです。

ありがとうございました!

4

3 に答える 3

0

delayd_jobの使用に縛られている場合は、このrailscastを見てください。キャストは特に遅延郵送に対処します。

于 2012-11-28T17:30:30.087 に答える
0

ここで find_in_batches メソッドを調べる必要があると思います: http://guides.rubyonrails.org/active_record_querying.html

あなたの場合、最初にすべてのユーザーをバッチで見つけ、そこから各バッチを send_email_to_all_users メソッド呼び出しに割り当てます (User.all を各バッチに置き換えます。

または、ニュースレター プロセス全体を独自のクラスに移動して、少しカプセル化することもできます (したがって、コントローラーからメソッドを呼び出しますが、クラス内のすべてのロジックを実行します)。

とにかく、 find_in_batches が必要だと思います。

于 2012-12-14T04:27:18.530 に答える
0

resque_mailer とこ質問を見てください

于 2012-11-27T13:04:34.003 に答える