Skip to content

Commit 71ac661

Browse files
committed
配置mail使用sidekiq队列发送邮件
1 parent a162089 commit 71ac661

4 files changed

Lines changed: 15 additions & 4 deletions

File tree

app/controllers/users_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def create
2828

2929
respond_to do |format|
3030
if @user.save
31-
UserMailer.welcome_email(@user).deliver
31+
UserMailer.welcome_email(@user).deliver_later
3232
format.html { redirect_to @user, notice: 'User was successfully created.' }
3333
format.json { render :show, status: :created, location: @user }
3434
else

app/mailers/user_mailer.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
class UserMailer < ApplicationMailer
2+
# 发送邮件的时候使用UserMailer.welcome_email(@user).deliver执行邮发送。
3+
# 使用deliver可以直接发送邮件。
4+
# 使用deliver_now立即发送邮件,但是并不是异步发送,并且无法使用sidekiq作为发送连接器。
5+
# 使用deliver_later是异步发送,并且能使用配置的sidekiq连接器。
26
def welcome_email(user)
37
@user = user
48
@url = Rails.application.credentials[:test_url]

config/application.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ class Application < Rails::Application
1818
# active job设置队列后台连接器,配置成sidekiq的。
1919
config.active_job.queue_adapter = :sidekiq
2020

21-
# 如加入对面名前缀和连接前缀后对列名变成了 development.queue_name
21+
# 如加入对面名前缀和连接前缀后对列名变成了 development_queue_name
2222
# 设置任务队列名称的前缀。
2323
config.active_job.queue_name_prefix = Rails.env
24-
# 默认队列名称的连接前缀是 _
25-
config.active_job.queue_name_delimiter = '.'
24+
# 默认队列名称的连接前缀是"_",可以使用下面的方法修改。
25+
# config.active_job.queue_name_delimiter = '.'
2626

2727
end
2828
end

config/sidekiq.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,24 @@
33
# queues是用来配置队列的,默认对列名是default,如要要配置多个队列的话如下所配置的,后面的数字指的是权重。可以给工作线程指定队列名。
44
# staging和production是指所在的环境。
55
# 如果发送任务失败会默认进行重试,默认重试25次,当然这个可以通过配置项max_retries进行更改。
6+
# 注意如果发邮件的时候要使用sidekiq队列的话,需要把mailers(注意:可能其还有前缀)这个对列名加到里面,否则可能会导致邮件无法发送。
67

78
---
89
:pidfile: tmp/pids/sidekiq.pid
910
:logfile: log/sidekiq.log
1011
:timeout: 30
1112
:max_retries: 10
1213
:concurrency: 30
14+
development:
15+
:concurrency: 20
16+
:queues:
17+
- development_mailers
1318
staging:
1419
:concurrency: 10
1520
production:
1621
:concurrency: 30
22+
:queues:
23+
- production_mailers
1724
:queues:
1825
- [critical, 2]
1926
- default

0 commit comments

Comments
 (0)