[Rails] Whenever에서 대량 처리(알림을 읽지 않은 경우 Action Mailer를 통해 3개 이상)
6071 단어 ActionMailerwheneverRails배치 처리

전제 조건

나의 상황은 이미 상술한 통지 기능을 만들었다.
대략적인 절차
설치 방법
1. Action Mailer를 통한 메시지 생성
[초보자용] Rubi on Rails 애플리케이션을 통해 메일 발송 기능을 실현하는 방법
rails g mailer ScheduledProcessing
다음 파일을 만들 수 있습니다폴더 파일 이름
app/meilers/application_mailer.rb
controller 같은 인상.
app/meilers/scheduled_processing_mailer.rb
controller 같은 인상.
app/views/scheduled_processing_e-메일(폴더)
비주얼
2. 동작 이미지에서 "읽지 않은 사용자 3개 이상 찾아서 메일 보내기" 처리 정의
class ApplicationMailer < ActionMailer::Base
default from: "ノミジョイ!チーム(ここは送り先。任意の名前を入力) <[email protected]>"
layout 'mailer'
end
class ScheduledProcessingMailer < ApplicationMailer
def check_notice_mail
@url = "https://nomi-joy.com/users/sign_in"
users_with_unckecked_notices = User.all.select do |user|
user.passive_notifications.where(visited_id: user.id, checked: false).count >= 3
end
users_with_unckecked_notices_mails = users_with_unckecked_notices.pluck(:email)
mail(subject: "未読の通知が3件以上あります", bcc: users_with_unckecked_notices_mails)
end
end
방법명check_notice_mail
이지만 여기는 임의로 되어 있어 문제없습니다.@url = "https://nomi-joy.com/users/sign_in"
발송한 메일에 앱의 로그인 화면에 URL을 표시하고 싶어 기재했고, 필요하지 않으면 기재하지 않아도 된다.select는 반환값이 실제 요소의 배열을 수집하는 방법으로
users_with_unckecked_notices
읽지 않은 알림은 3건 이상의 User들의 배열이다."지금의 모든 User를 한 명씩 조사합니다. user에게 연락한 (수신) 알림에 읽지 않은 알림이 3개 이상 있는지 확인합니다. 만약 사실이라면 해당 User를 배열하세요. users with unckecked notices가 배열되어 있습니다."이런 느낌이야.
'user.passive_notifications.where(visited id:user.id,checked:가짜)'는 알림 기능의 디자인에 따라 달라질 수 있으니 자신의 설치에 따라 변경하십시오.
pluck은 매개 변수에 설정된 열 (여기는 이메일) 의 데이터만 수집하여 배열하는 방법입니다.따라서
users_with_unckecked_notices_mails
는 다음과 같다.users_with_unckecked_notices_mails
=> ["[email protected]","[email protected]"]
메일(subject: "3개 이상의 읽지 않은 알림이 있음", bcc:users with unckecked notices mails)을 통해 메일을 보냅니다.bcc를 to로 바꿔도 돼요.3. 메일 내용 작성
파일 이름
check_notice_mail.html.erb
html
check_notice_mail.text.erb
text
<!doctype html>
<html lang="ja">
<head>
<meta content="text/html; charset=UTF-8" />
<style>
/* h2,p{
color:#215c89;
} */
</style>
</head>
<body>
<hr>
<h3>未読の通知が3件以上あります</h3>
<hr>
<p>通知は【フォローされたとき】、【ダイレクトメッセージが届いたとき】、【新規ノミカイに招待されたとき】、【カンジから何かしらの連絡を受けたとき】に届きます。</p>
<p>◆詳細は下記よりログインして【Notice(通知)】からご確認いただけます。</p>
<p> ノミジョイ!ログインページ:<br> <%= @url %></p>
<br>
<p>※このメールは送信専用です。</p>
<hr>
<h3>ノミジョイ!チーム</h3>
<hr>
</body>
</html>
===============================
未読の通知が3件以上あります
===============================
通知は【フォローされたとき】、【ダイレクトメッセージが届いたとき】、【新規ノミカイに招待されたとき】、【カンジから何かしらの連絡を受けたとき】に届きます。
◆詳細は下記よりログインして【Notice(通知)】からご確認いただけます。
ノミジョイ!ログインページ:
<%= @url %>
※このメールは送信専用です。
===============================
ノミジョイ!チーム
===============================
4. whenever 가져오기
5.1일 1회 2회, whenever 실행(메일 발송)
# 絶対パスから相対パス指定
env :PATH, ENV['PATH']
# ログファイルの出力先
set :output, 'log/cron.log'
# ジョブの実行環境の指定(実行環境はprodaction環境がデフォルト設定)
set :environment, :development
# 日本時間の午前8:00にメール送信される(JSTは+9:00なので-9:00の時間を記述)
# 未読通知が3件以上たまっているユーザーにメール通知
every 1.days, at: '11:00 pm' do
runner "ScheduledProcessingMailer.check_notice_mail.deliver_now"
end
이번에는 일본시간 오전 8시로 설정해 이메일을 보냈다.처음에는 디버깅을 위해 다음과 같이 확인할 수 있을 것 같습니다.every 1.minutes do
runner "ScheduledProcessingMailer.check_notice_mail.deliver_now"
end
bundle exec whenever --update-crontab
crontab -l
ScheduledProcessingMailer.check_notice_메일에 기재가 되면 등록을 하겠습니다.로그는log/cron입니다.로그 확인 가능
=>이러면 메일을 보내야지!!

bundle exec whenever --clear-crontab
crontab -l
비우면 오케이.
Reference
이 문제에 관하여([Rails] Whenever에서 대량 처리(알림을 읽지 않은 경우 Action Mailer를 통해 3개 이상)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kyoooko/items/32df5b5825677627b09a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)