ruby-on-rails - 延迟发送邮件以延长页面加载时间

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

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

ProductNotificationMailer.notify_product(n.email).deliver

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

谢谢

最佳答案

是的,您需要调查后台工作人员。 Sidekiq , DelayedJobResque是一些受欢迎的。

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

相关文章:

jquery - 为什么 jQuery 未在我的 Rails 3.2.3 应用程序中加载?

ruby - 在测试失败的 View 中使用 CanCanCan

ruby-on-rails - 通过 Rails 中的 assert_routing 测试具有主机约束的路由

jquery - 如何使用 jQuery 添加和删除表单字段?

mysql - 使用 ActiveRecordObject.select 进行计数

ruby-on-rails - ruby /rails : convert int to time OR get time from integer?

ruby-on-rails - 如何使用 Rails + Mongo 解决 URL 性能缓慢的问题

ruby-on-rails - rails 4 - 缺少参数或值为空 : projecttype

javascript - 具有 Angular JS 客户端的 Rails REST API 权限 (CanCan)。如何根据权限渲染UI?

ruby-on-rails - Rspec should match is false 但 eq 应该为真吗?