rails中的deliver和deliver_now有什么区别?

问题描述 投票:0回答:2

rails 邮件程序中的 Deliver 和 Deliver_now 之间没有明确的解释。

如果我们使用 Deliver_now 它不会排队等待活动作业。如果我们使用deliver_later,它将由active_job(后台作业)执行。

当deliver和deliver_now不是在后台执行时,那么它们到底有什么区别呢?我搜索了很多但没有得到明确的想法。在交付和交付_现在之间。

有什么区别还是两者都一样

ruby-on-rails actionmailer
2个回答
5
投票

它们是一样的。使用

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

0
投票

简短的回答是,#deliver_now 是 #deliver 的包装器,并在 Rails 源代码 的底层使用 #deliver。没有什么大的区别。两者都可以工作 - 即使在 Rails 6+ 中 - 但首选#deliver_now,因为它更公开地说明代码正在做什么/正在发生什么。

在实践中,你几乎总是想使用 #deliver_later 并使用像 Sidekiq 与 Redis、GoodJob(或 Rails 8 中的 SolidQueue)这样的后台服务器 - 如果我没记错的话,#deliver_now 可能会阻塞Web 请求 - 因此最好将其卸载到后台进程,以加快 Rails 应用程序对用户的响应时间。

© www.soinside.com 2019 - 2024. All rights reserved.