Mac一から備忘録

Macで一から整えていった環境について公開

【rails】delayed_job

・概要

簡単に重い処理を非同期に設定してくれる

collectiveのリポジトリのほうが開発がお盛んとのこと

 

・目的

ActiveMailerのmail()で返ってくるMessageインスタンスのdeliverメソッドがうんこみたいに遅いのでそれを非同期にしたい

 

・使い方

Gemfileにdelayed_job_active_recordを追加

rails g migration delayed_job:active_record

rake db:migrate

Hoge.method 

ならHoge.delay.methodにするだけでおk

 

Hoge.fuga.deliverは

Hoge.delay.fuga

ここだけ特殊.

delayが勝手にdeliverもやってくれるらしい

 

・数々のエラー

とりあえずdelayを指定したメソッド内で自作moduleのメソッドを読んだらエラーがでる.

application.rbに自作moduleのパスは通しているのに?

 

 

エラー内容について普通に考える(最初に考えろ)

ようはdelayメソッド内ではutil_moduleが通っていないのが原因っていう単純なや〜つだろってことで、う〜ん,まあ違う方法でパスとおしゃいいんしょ。

 

掲示板とか公式ドキュメントを読むと,

config/initializers/custom.rbにincludeなりrequireなり書けばWorkerは認識しますとのこと

 

それに従うことでエラーは消えた

custom.rbにはutil_module.rbが通っているので単純に

include MyModule

だけでおk

 

・deliverが恐ろしく遅いのでこれ自体をもうデフォルトで非同期にしたいのだけど,やり方がわからん〜

公式に書かれているhandle_asynchronouslyがうまく動かんし疲れたしってか疲れた

ってことでとりあえずはHoge.delay.hugaMethodの形で使うことにする

 

日本語でかいちくり〜