延迟发送邮件以增加页面加载时间

时间:2013-05-20 17:11:09

标签: ruby-on-rails ruby-on-rails-3

在我的Product#create方法中,我有类似

的内容
ProductNotificationMailer.notify_product(n.email).deliver

如果产品保存,则会触发。现在事情是在上面被解雇之前,有一堆逻辑和计算发生,这延迟了确认页面加载时间。有没有办法确保下一页首先加载,邮件传递可以在以后或后台发生?

由于

2 个答案:

答案 0 :(得分:2)

是的,你会想看看背景工作者。 SidekiqDelayedJobResque是一些受欢迎的广告。

这是一个很棒的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)