Open3

Heroku Schedulerを使用して、毎月1日にメールを送信

3210mo3210mo

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オプションを使う
3210mo3210mo

スケジューラのログを確認するコマンド

heroku logs -t -a アプリ名 --ps scheduler
3210mo3210mo

heroku スケジューラでタスクを設定

%d 7じゃなく07にしないとだめ
%-d 7でもOK
Every day at... 4:30 AM UTC
$ [ $(date +%d) = 07 ] && rake send_settlement_pdf_email