2011年1月12日水曜日

[Rails3] meta_whereのコンディションとdelayed_jobのハマりどころ

都合上「何にでもヒットする meta_where のコンディション」が必要になったので、作りかた。

MetaWhere::Condition.new :id, nil, :like

これでおk。

catch_all = MetaWhere::Condition.new :id, nil, :like
Books.where(catch_all | :title.matches % "相振り中飛車で攻")

こんな感じで使える。場合によっては便利…?

それからdelayed_job、これはいろいろと fork されているみたいだけど、今回は有名な https://github.com/collectiveidea/delayed_job こちらを採用させてもらいました。

Mail.delay.deliver

とメソッドチェインするだけで遅延してくれるという優れ物ですが、実用までのメモと自分用のメモ。

$ vi Gemfile
gem "delayed_job"


$ vi config/initializers/delayed_job_config.rb

Delayed::Worker.destroy_failed_jobs = false


$ bundle
$ rails generate delayed_job
$ rake db:migrate
$ ./script/delayed_job start

これで使えるようになる。なお production 環境で使う場合は

$ rake db:migrate RAILS_ENV=production
$ RAILS_ENV=production ./script/delayed_job start

こんな感じ。

で、ハマりどころは、

  • コントローラやProcインスタンスに対しては使えない。適宜 SomethingHelper::should_be_delayed などを定義して使う。
  • delay を呼び出すコードの周り(どの辺までなのかは知らん)が変わったら delayed_job デーモンを再起動すること。

このふたつ。見事にハマりました。

ま、リソースが足りなきゃいくら遅延しても意味ないけどね。

お名前.comのサーバがまた落ちている…。

押してねっ→BlogPeople「趣味の世界」ブログランキング

0 件のコメント:

コメントを投稿