kansiho's memo

ruby, python, javascript. Rails, wordpress, OpenCV, heroku...

delayed_job

githubの重点箇所を英訳。

delayed_job 3.0.0は Rails 3.0以上しかサポートしていないのに注意。

delayed_job を Active Recordで使いたいなら, delayed_job_active_record をGemfileに加える.

gem 'delayed_job_active_record'

Active Record バックエンドはjobsテーブルを必要とする. 以下のコマンドで作成する。

bundle exec rails generate delayed_job:active_record
bundle exec rake db:migrate

.delay.method(params)をどんなプロジェクトでも呼べば、それはバッググランドプロセスとなる。

# delayed_jobなし
@user.activate!(@device)

# delayed_jobあり
@user.delay.activate!(@device)

どんなときでもバックグラウンドでプロセスを走らせたいなら、handle_asynchronously メソッドでデフォルト設定にできる。

class Device
  def deliver
    # long running method
  end
  handle_asynchronously :deliver
end

device = Device.new
device.deliver

パラメータ

handle_asynchronously とdelay は以下のパラメータを利用する:

  • :priority (number): 小さいナンバーほど優先される; デフォルトは0 (例: handle_asynchronously :send_mailer, :priority => 20)

  • :run_at (Time): 指定した秒後に実行する (実行を未来にできる、例:handle_asynchronously :call_a_class_method, :run_at => Proc.new { 2.hours.from_now })

私の環境