1

發送簡訊我已經和admin_mailer用delayed_job的

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個電子郵件帳戶。

我的問題是,如果這種方式是正確的發送通訊與一個大的郵件列表,或者我可以做這個更好的方式任務。

謝謝!

回答

0

如果你陷入使用delayed_job的,看看這個railscast。演員專門處理延遲郵件。

0
+0

謝謝,但我使用'delayed_job'並添加其他後臺作業寶石是不可能的。非常感謝你! – hyperrjas

0

我想你應該看看find_in_batches方法在這裏:http://guides.rubyonrails.org/active_record_querying.html

在你的情況,你可以先找到所有用戶分批,並從那裏,分配給每個批次的send_email_to_all_users方法調用(更換用戶。所有的批次都可以使用

或者,甚至更好的是,您可以將整個新聞通訊過程移動到其自己的類中,並將其封裝一點(因此,仍然從控制器調用方法但運行類中的所有邏輯。 )

無論如何,我認爲find_in_batches是什麼你需要。