setoya-blog

システム開発技術、データ分析関連でお勉強したことや、山奥生活を綴る、テンション低めなブログです。

delayed_jobでジョブを実行する時間を指定する

delayed_jobは何もしなければ、workerの手が空いたときにジョブを実行してくれるが、XX分後、などの時間を指定したい場合、handle_asynchronouslyメソッドを読んで、:run_atを指定すればよいらしい。

  def in_the_future
    # Some other code
  end
  # 5.minutes.from_now will be evaluated when in_the_future is called
  handle_asynchronously :in_the_future, :run_at => Proc.new { 5.minutes.from_now }

参考:collectiveidea/delayed_job · GitHub

追記:

mailerのメソッドで試したら、うまく行かなかったので、モデルのメソッドでmailerを呼ぶ処理をラップして、モデルのメソッドに対して時間指定を行うと正しく動作した。