Rails4.2から追加されるActiveJobについて
rails4.2のbeta2が出ましたね。
以前かいたActiveJobについて、修正があったので改めて記事を書きました。
ActiveJobとはRails4.2から追加された仕組みで、delayed_jobやresqueなどのキューイングを行うgemを同じインターフェースで使えるようにしたものです。使うためには以下のようなコードを追加する必要があります。
ActiveJob::Base.queue_adapter = :delayed_job
上記はキューイングで使うgemに何を使うのかで右側の値が変わります。上の例ではdelayed_jobを使う設定になっています。
そして次にActiveJobのジェネレータを使った~Jobクラスを作成します。
rails g job hello
これをによりapp/jobsディレクトリが作成されて、配下にhello_job.rbが作成されます。この作成されたクラスに若干コードを追加して以下のようにします。
class HellloJob < ActiveJob::Base queue_as :urgent def perform(message = 'test') # Do something later puts message end end
ここまで作成したら、後はキューにセットしている箇所でActiveJobが用意しているメソッドを使うようにするだけです。
例えば以下のように書きます。
HelloJob.perform_later 'ほげほげほげ' HelloJob.set(wait: 1.minute).perform_later 'うごうぐぐ'
このperform_laterメソッドがActiveJobが用意しているキューイング処理を行うメソッドです。でsetメソッドで何分後に時刻するかなど設定します。
4.2からはdelayed_jobやresqueを直接使うのではなくActiveJobを使うのがベストなやり方ということになるのでしょうかね。まだちょっとこれを使うメリットが分かっていないのですが・・。