加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 4 – Mailer deliver_later没有达到我的

发布时间:2020-12-16 21:12:42 所属栏目:百科 来源:网络整理
导读:我有一个rails应用程序,其中我有一个发送了很多电子邮件的功能.我想以异步方式进行,我认为deliver_later方法会这样做.目前,我从用户点击提交到提交表单时有一些延迟 – 这会导致糟糕的用户体验(这是一个非常简单的表单).我的实现看起来像这样: def create r
我有一个rails应用程序,其中我有一个发送了很多电子邮件的功能.我想以异步方式进行,我认为deliver_later方法会这样做.目前,我从用户点击提交到提交表单时有一些延迟 – 这会导致糟糕的用户体验(这是一个非常简单的表单).我的实现看起来像这样:
def create

  respond_to do |format|
    if @competition.save
      [...]
      send_notification_to_team_members
    end
end

def send_notification_to_team_members
  @team.members.each do |member|
    unless member.user.eql?(current_user)
      Mailer.deliver_new_competition_notification(member.user,@competition).deliver_later
    end
  end
end

目前,该动作需要约4秒钟才能完成.我也尝试过:

Mailer.deliver_new_competition_notification(member.user,@competition).deliver_later(wait: 1.minute)

然后它需要更长时间 – 我估计约1分钟.

所以,我错误地使用deliver_later,或者方法没有按照我的预期进行.在那种情况下,我可以使用另一种方法来提高我的表现吗?

解决方法

deliver_later使用 ActiveJob来提供异步执行.

然而,ActiveJob本身并不提供异步性 – 它是一个统一的api层,可以由许多后端来实现.默认的一个只运行内联它不是异步.

要获得异步使用,您需要选择异步后端.您可以在应用程序的配置中配置后端

config.active_job.queue_adapter = ...

通常,大多数适配器都需要相应的gem(例如delayed_job,sidekiq,sucker_punch),它们也可能有自己的依赖关系(例如sidekiq要求你使用redis.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读