[英]Rails:Send mail using mailer when controller finishes its execution
我正在使用一個按鈕來報告濫用 ,點擊哪個ajax調用轉到控制器,並在將 數據庫中的 濫用 插入后,它返回成功。 在成功響應時,它在UI主題上顯示為濫用。 現在我想向管理員發送有關此內容的郵件 。 我已經在控制器中集成了郵件程序 ,即執行成功郵件程序代碼並將郵件發送給管理員。
現在的問題是發送郵件需要花費太多時間 ,所以我的ajax響應時間也會增加 。 我想要的是郵件程序代碼應該在控制器發送其響應 后執行 ,以便響應時間減少。
謝謝
我們使用resque郵件程序 - https://github.com/zapnap/resque_mailer/
更多信息: https : //www.ruby-toolbox.com/projects/resque_mailer
這很容易設置。
更多信息:
http://blog.zerosum.org/2010/1/9/resque-mailer.html
http://www.scottw.com/simple-resque-mail-queue
http://ku1ik.com/2011/04/05/resque-mailer-says-put-your-emails-to-background.html
處理此問題的一種簡單方法是創建一個線程來處理電子郵件。 簡單地說:
Thread.new do
SomeMailer.some_method.deliver
end
在單獨處理線程時,您的控制器操作將繼續並完成Ajax響應。 請記住,如果您的郵件程序有廣泛的處理,那么它可能會失敗(如果沒有記錄線程,它將不會出現任何日志錯誤),如果仍然處理超出完成主控制器操作的時間。 這只會在開發中發生,因為類在完成時未實例化。 要解決此問題,只需在development.rb中更改:
config.cache_classes = true
您也可以使用后台作業流程,但是對於較輕的負載,Threads工作得很好並且易於實現。
你嘗試過使用delayed_job嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.