Open3
Heroku Schedulerを使用して、毎月1日にメールを送信
ActionMailerの設定
- app/mailers/settlement_pdf_mailer.rbを生成
- send_monthly_pdfアクションを生成
旧コード
class SettlementPdfMailer < ActionMailer::Base
default from: Settings.site.mail.info
# 毎月、精算管理表を各会社にメールで送信
def send_monthly_pdf
@customers = Customer.all
@send_emails = []
@customers.each do |customer|
@send_users = customer.user_customers.where(role: [:president, :medical_chairman])
@send_emails += @send_users.pluck(:send_email)
end
mail(to: @send_emails,
subject: "先月の精算管理表一覧")
end
end
新コード
def send_monthly_pdf
@send_emails = UserCustomer.where(role: [:president, :medical_chairman])
.joins(:user)
.pluck('users.send_email')
mail(bcc: @send_emails, subject: "先月の精算管理表一覧")
end
- 会社ごとに個別にクエリが発行されるのを、一度でユーザーを取得できるようにした。
- Mailでは、
to
オプションでは全員のメアドが見えてしまうため、bcc
オプションを使う
スケジューラのログを確認するコマンド
heroku logs -t -a アプリ名 --ps scheduler
heroku スケジューラでタスクを設定
%d 7じゃなく07にしないとだめ
%-d 7でもOK
Every day at... 4:30 AM UTC
$ [ $(date +%d) = 07 ] && rake send_settlement_pdf_email