在我的 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 更容易/更快。
存储作业后,您将在后台运行第二个进程来完成这项工作,从而释放您的 Web 进程以立即返回渲染响应。
关于ruby-on-rails - 延迟发送邮件以延长页面加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16654653/