ruby-on-rails - Rails - 异步发送所有带有 delayed_job 的电子邮件

标签 ruby-on-rails ruby-on-rails-3 asynchronous devise actionmailer

我正在使用 delayed_job我对此非常满意(尤其是 workless 扩展)。

但我想将来 self 的应用程序的所有邮件设置为异步发送。

确实是为邮寄者提供的解决方案

# without delayed_job
Notifier.signup(@user).deliver

# with delayed_job
Notifier.delay.signup(@user)

不适合我因为:

  • 不容易维护
  • 从 gems 发送的邮件不是异步发送的(devisemailboxer)

我可以使用这种扩展 https://github.com/mhfs/devise-async但我宁愿立即为整个应用找出解决方案。

我不能扩展 ActionMailer 来覆盖 .deliver 方法(就像这里的 https://stackoverflow.com/a/4316543/1620081 但它已经 4 岁了,就像我找到的几乎所有文档一样关于主题)?

我正在使用 Ruby 1.9 和 Rails 3.2 以及 activerecord。

感谢支持

最佳答案

一个简单的解决方案是在 Notifier 对象上编写一个实用方法,如下所示:

class Notifier

  def self.deliver(message_type, *args)
    self.delay.send(message_type, *args)
  end

end

发送注册邮件如下:

Notifier.deliver(:signup, @user)

实用程序方法提供了一个单点,如果需要,您可以用 resque 或 sidekiq 解决方案替换延迟的作业。

关于ruby-on-rails - Rails - 异步发送所有带有 delayed_job 的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21556050/

相关文章:

ruby-on-rails - ASP.NET MVC3 中的 Rails 有很多等价物

ruby-on-rails - Ruby 的股票技术指标库

ruby-on-rails - Ruby on Rails JSON.parse(object.to_json) 不返回原始对象

jquery - 当 Twitter Bootstrap 模式窗口包含 Rails 表单助手时显示错误

ruby-on-rails - 如何限制用户在 ruby​​ on rails 中只能发布一次 "liking"?

javascript - 如何在不嵌套回调的情况下保证同步执行?

ruby-on-rails - Rails 5,master 分支,使用生成器

ruby-on-rails - 在 Ruby on Rails-3 中使用 'form_tag' 和命名空间提交表单

C# 如何将不仅仅是 IAsyncResult 传递给 AsyncCallback?

返回 Firebase 用户名时的 iOS 异步任务问题