如何使用 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”错误