ActiveJobを使った非同期処理の方法
Ruby on Railsを使って非同期で処理する方法 ActiveJobについてです。
ざっくり手順
- generateでjobファイルを作成する
- jobをキューに登録する
- jobを実行する
generateでjobファイルを作成する
コマンドで
$ bundle exec rails g job hoge_job
手作業で
jobs/hoge_job.rb
に.rbファイルを作成する
jobをキューに登録する
HogeJob.perform_later(event_id: @event.id)
perform_later: 実行キューが積まれて随時処理する
perform_now: 今すぐに実行する
時間指定する方法
明日の正午("2019/06/12 12:00")
HogeJob.set(wait_util: Date.tomorrow.noon).perform_later()
1週間後
HogeJob.set(wait: 1.week).perform_later()
※要注意は時間を指定してはいけない。あくまで日数を指定すること。
呼び出された方
#jobs/hoge_job.rb class HogeJob queue_as :default URL = Rails.application.secrets.url SUCCESS = 200 FAILED = 400 def perform(event_id, status_code = 100) response = RestClient.get "#{URL}?event_id=#{event_id}&status_code=#{status_code}" result = JSON.parse(response.body).dig('root') if result['code'] == FAILED Bugsnag.notify(exception, { event_id: event_id, error_message: result['message']}) end end end
コールバックを指定することもできるので、model的な感じで色々できそうです。