rails 邮件程序中的 Deliver 和 Deliver_now 之间没有明确的解释。
如果我们使用 Deliver_now 它不会排队等待活动作业。如果我们使用deliver_later,它将由active_job(后台作业)执行。
当deliver和deliver_now不是在后台执行时,那么它们到底有什么区别呢?我搜索了很多但没有得到明确的想法。在交付和交付_现在之间。
有什么区别还是两者都一样
它们是一样的。使用
deliver_now
,而不是 deliver
。
https://apidock.com/rails/v4.2.9/ActionMailer/MessageDelivery/deliver
def deliver #:nodoc:
ActiveSupport::Deprecation.warn( `#deliver` is deprecated and will be removed in Rails 5. Use `#deliver_now` to deliver immediately or `#deliver_later` to deliver through Active Job..squish)
deliver_now
end
简短的回答是,#deliver_now 是 #deliver 的包装器,并在 Rails 源代码 的底层使用 #deliver。没有什么大的区别。两者都可以工作 - 即使在 Rails 6+ 中 - 但首选#deliver_now,因为它更公开地说明代码正在做什么/正在发生什么。
在实践中,你几乎总是想使用 #deliver_later 并使用像 Sidekiq 与 Redis、GoodJob(或 Rails 8 中的 SolidQueue)这样的后台服务器 - 如果我没记错的话,#deliver_now 可能会阻塞Web 请求 - 因此最好将其卸载到后台进程,以加快 Rails 应用程序对用户的响应时间。