※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
自分でJobを作成してみる
今回はアドミンから通知が送られてくるようにする
(ユーザー数が多い場合を想定し、同期処理では終わらないので非同期処理にする)
app/jobs/notification_from_admin_job.rbのファイルを作成する
名前の最後に「job」をつけるのがルール
jobがついている=非同期処理
まずjob作成の枠組みは↓のとおりになる
class NotificationFromAdminJob < ApplicationJob
queue_as :default
def perform
end
end
queue_as :default
どこのキュー(queue
)に入れるのか?→default
def perform
は必ず定義すること!
このJobを実行したとき、performのメソッドが動くため
通知を送るためのMailerを作成する
app/mailers/notification_from_admin_mailer.rbを作成する
class NotificationFromAdminMailer < ApplicationMailer
def notify(user, msg)
@msg = msg
mail to: user.email, subject: 'お知らせ'
end
end
引数にmsg
を入れ、@msg = msg
にする
→ アドミン側が自由にメッセージを送れるようにしておく
views/notification_from_admin_mailer/notify.html.hamlを作成する
%p 運営からのお知らせ
%p= @msg
今回のメインじゃないので適当に。
非同期処理したい内容を書いていく
class NotificationFromAdminJob < ApplicationJob
queue_as :default
def perform(msg)
User.all.each do |user|
NotificationFromAdminMailer.notify(user, msg).deliver_later
end
end
- 全ユーザー
User.all.each do |user|
に - NotificationFromAdminMailer.rbで定義された
notify(user, msg)
メソッドのメール送信を- 非同期処理
deliver_later
でおこなう
rails c
を起動する
まずNotificationFromAdminJob
と書いて、返ってくるか確認する
NotificationFromAdminJob.perfom_now
→同期的に処理するNotificationFromAdminJob.perfom_later
→非同期的で処理する
Enqueuedとは「queueに溜まった」という意味
ActionMailer
が、start
→done
を繰り返していることがわかる
送りたいメールが、ちゃんと送信できている
(現時点ではまだ失敗も再試行も0だけど)
もしメール送信に失敗した場合、sidekiqは再試行してくれる
再試行すると成功することが多いので便利!
#DAY10