在我的Product#create
方法中,我有类似
ProductNotificationMailer.notify_product(n.email).deliver
如果产品保存,则会触发。现在事情是在上面被解雇之前,有一堆逻辑和计算发生,这延迟了确认页面加载时间。有没有办法确保下一页首先加载,邮件传递可以在以后或后台发生?
由于
答案 0 :(得分:2)
是的,你会想看看背景工作者。 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。
存储作业后,您将在后台运行第二个进程来完成工作,从而释放您的Web进程以立即返回呈现响应。
答案 1 :(得分:1)