2017-02-17 107 views
0

我已使用this instructions並向我的註冊用戶發送了「歡迎」郵件。但是這會讓用戶等待5-8秒,因爲服務器正試圖完成這個郵件。用於發送背景電子郵件的外部Web服務

我不希望用戶等到郵件發送但立即看到「郵件已發送」消息。所以這給我帶來了Rails的背景工作。 Rails中有許多選項,比如用於後臺作業的delayed_job,Resque等。但是,使用這些類型的解決方案,我的理解:

1 - 創建一個後臺作業 2-運行此作業

比方說,我使用的後臺作業的解決方案之一,這樣的話,我需要別的東西運行也這個工作,像cron工作...

我認爲只是發送註冊和密碼提醒電子郵件,另一個更容易的解決方案應該是可能的。我的意思是像另一個外部服務,我會爲每種郵件創建一個模板,我會發送,2 - 我會傳遞一些參數,如receiver_email,template_id,receiver_username,password_link等...通過這種方式,我將不需要任何後臺工作,並且用戶不會等待。

我碰到過其他一些叫做「sucher_punch」的寶石,但據我所知,從人們的信息和貼出來的問題,使用heroku,這個寶石可能因爲Heroku的某些原因而失敗,並且郵件可能不會被髮送,不知道它。

無論如何,rails開發人員處理這個電子郵件問題的一般方式是什麼?也許我也可以像上面解釋的那樣使用sendgrid,我可以嗎?

+0

嗨,恩尼斯。如果你覺得答案可以幫助你達到目的,請考慮接受它。謝謝 –

回答

0

在後臺發送郵件就是這樣一個常見用例,Rails 4.2在ActionMailer中引入了#deliver_later方法來提供無縫集成ActiveJob

您不需要設置cron作業來檢查後臺隊列中是否有任何作業。 Sidekiq,Resque或DelayedJob將爲您照顧。

似乎Sendgrid確實允許creating templates併發送可變內容來填充它們,但該功能不會破壞異步進行該調用的好處。事實上,如果外部資源(Sendgrid)不可用,將其推遲到後臺還具有不中斷用戶體驗的附加好處。

您應該嘗試安裝您提到的後臺處理解決方案之一(我建議sidekiq)並利用ActionMailer + ActiveJob integration

相關問題