【发布时间】:2015-12-13 16:12:54
【问题描述】:
Rails 中与ActiveJob 交互的常见模式是使用perform() 方法设置一个作业,该方法通过perform_now 或perform_later 异步调用
在Mailers的特殊情况下,您可以直接调用deliver_now或deliver_later,因为ActiveJob与ActionMailer很好地集成。
rails documentation 有以下 cmets -
# If you want to send the email now use #deliver_now
UserMailer.welcome(@user).deliver_now
# If you want to send the email through Active Job use #deliver_later
UserMailer.welcome(@user).deliver_later
措辞使deliver_now 看起来不会使用ActiveJob 发送邮件。这是正确的,如果是这样,deliver_now 和deliver_later 之间的真正区别是什么?一个不是异步的吗?
同样,perform_now 和 perform_later 也有同样的区别吗?
谢谢!
【问题讨论】:
-
对我来说,ActionMailer 和 ActionJob 像这样相互混淆似乎很糟糕。 ActionJob 应该不知道工作正在做什么。 ActionMailer 应该能够被 ActionJob 延迟,而不必知道它正在被延迟,就像任何其他对象一样。对我来说,这似乎在 Rails 3、4 和 5 中被打破了。
标签: ruby-on-rails jobs rails-activejob