目次 閉じる
自分でJobを作成してみる
今回はアドミンから通知が送られてくるようにする
(ユーザー数が多い場合を想定し、同期処理では終わらないので非同期処理にする)
app/jobs/notification_from_admin_job.rbのファイルを作成する
名前の最後に「job」をつけるのがルール
jobがついている=非同期処理
まずjob作成の枠組みは↓のとおりになる
class NotificationFromAdminJob < ApplicationJob
queue_as :default
def perform
end
endqueue_as :defaultどこのキュー(queue)に入れるのか?→defaultdef 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

