在Product#create
我的方法我有類似延遲發送郵件,以提高網頁加載時間
ProductNotificationMailer.notify_product(n.email).deliver
如果產品被保存時觸發關閉。現在事情是在上面被解僱之前,有一堆邏輯和計算髮生延遲確認頁面加載時間。有沒有辦法確保下一頁首先加載,並且郵件傳遞可以稍後或在後臺進行?
謝謝
在Product#create
我的方法我有類似延遲發送郵件,以提高網頁加載時間
ProductNotificationMailer.notify_product(n.email).deliver
如果產品被保存時觸發關閉。現在事情是在上面被解僱之前,有一堆邏輯和計算髮生延遲確認頁面加載時間。有沒有辦法確保下一頁首先加載,並且郵件傳遞可以稍後或在後臺進行?
謝謝
是的,你會想看看背景的工作人員。 Sidekiq,DelayedJob或Resque是一些流行的。
這是一個偉大的RailsCast demonstrating Sidekiq。
class NotificationWorker
include Sidekiq::Worker
def perform(n_id)
n = N.find(n_id)
ProductNotificationMailer.notify_product(n.email).deliver
end
end
我不確定在你的例子中n
是什麼,所以我只是跟着它。現在,你做的工作,你可以將其替換爲:
NotificationWorker.perform_async(n.id)
的原因你沒有通過完全的對象n
作爲參數,是因爲該參數將被序列化,而且更容易/更快剛剛連載整數ID。
一旦作業存儲,你必須在做這項工作,釋放你的網頁的過程立刻回去呈現響應後臺運行的第二處理。
甜蜜。我會試試看。謝謝 – psharma
你知道是否有辦法在軌道內做?我相信我無法在生產服務器上安裝redis,也不能同時運行兩個實例(rails和redis)。 – psharma
@psharma,DelayedJob不需要額外的redis服務器,但你仍然需要一個獨立的進程來讓後臺工作人員處理Rails應用程序正常請求/響應循環之外的工作。 –