Solid Queueの定期的なタスクを実装する

前回までのあらすじ

Railsでイベントの通知をモデリングする
通知モデルのユニットテストを実装する
モデル更新のブロードキャストを確認する
開発環境でSolid Queue/Cableを使う

Solid QueueのRecurringを使って定期的なタスクを実装します。

通知モデル(Notification)の先頭の処理済み(processed)を毎秒変更する。

通知更新ジョブ(UpdateJob)を生成する。


bin/rails generate job update

処理済み(processed)変更する。


app/jobs/update_job.rb

  def perform(*args)
    Notification.first.update! processed: !Notification.first.processed
  end

毎秒、UpdateJobを実行する。


config/recurring.yml

development:
  periodic_update:
    class: UpdateJob
    schedule: every second

アプリサーバーを起動する。


SOLID_QUEUE_IN_PUMA=1 bin/rails server

毎秒、処理済み(processed)が更新されることを確認する。

同じ要領で10分毎(”*/10 * * * *”)に通知するジョブを実装する。


bin/rails generate job notification

app/jobs/notification_job.rb

  def perform(*args)
    Notification.notify
  end

config/recurring.yml

development:
  periodic_notification:
    class: NotificationJob
    schedule: "*/10 * * * *"

アプリを動かしているOSのタイムゾーンは Asia/Tokyo です。
画面で登録する時に時差を考えなくて良いように、アプリのタイムゾーンをUTCから日本時間に変更します。


config/application.rb

    config.time_zone = "Tokyo"
    config.active_record.default_timezone = :local

以上です。



▼この記事がいいね!と思ったらブックマークお願いします
このエントリーをはてなブックマークに追加