如何使用 Sidekiq 在 Rails 中 3 分钟后发送电子邮件?

Posted

技术标签:

【中文标题】如何使用 Sidekiq 在 Rails 中 3 分钟后发送电子邮件?【英文标题】:How can I send email after 3 minutes in Rails using Sidekiq? 【发布时间】:2022-01-20 21:16:09 【问题描述】:

我有一个简单的 Rails 应用程序。当用户(current_user)创建属性时,我希望将电子邮件发送给管理员。邮寄工作正常,但我不知道如何在延迟 3 分钟后发送电子邮件。这里必须使用 sidekiq。

邮寄者:

 class PropertyMailer < ActionMailer::Base
   def property_created(user)
     mail(
       to: "admin@tgmalim-directory.com",
       from: user.email,
       subject: "Property submitted",
       body: "A property has been submitted. Please review it."
      )
   end
 end

属性控制器:

def create
 @property = current_user.properties.build(property_params)

 respond_to do |format|
  if @property.save
    
    SendEmailToAdminJob.perform_later
    
    format.html  redirect_to @property, notice: "Property was successfully saved." 
    format.json  render :show, status: :created, location: @property 
  else
    format.html  render :new, status: :unprocessable_entity 
    format.json  render json: @property.errors, status: :unprocessable_entity 
  end
end

结束

SendEmailToAdmin 工作:

 class SendEmailToAdminJob < ApplicationJob
   queue_as :default

   def perform(*args)

   end
 end

提前致谢

【问题讨论】:

ActiveJob::Core.set 带有一个wait 选项。 【参考方案1】:

您可以设置等待时间。

SendEmailToAdminJob.set(wait: 3.minutes).perform_later

见https://guides.rubyonrails.org/active_job_basics.html#enqueue-the-job和https://api.rubyonrails.org/classes/ActiveJob/Core/ClassMethods.html#method-i-set

【讨论】:

以上是关于如何使用 Sidekiq 在 Rails 中 3 分钟后发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

在多线程 Rails 环境中使用 Redis 的最佳方式是啥? (彪马/Sidekiq)

Rails 4.2 - Sidekiq 在开发中不发送电子邮件

Rails 6.1:Heroku 上的作业将使用 Async 而不是 Sidekiq

Sidekiq 3.4.2 和 Rails 4.2.0 出现“未定义方法 perform_at”错误

部署Cloud66和DigitalOcean的Rails不会影响当前正在运行的sidekiq进程

Docker-compose 与 redis、sidekiq、rails SocketError