在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应用程序正常请求/响应循环之外的工作。 –