Rails2の場合
■インストール
ActiveRecordの場合
gem 'delayed_job_active_record'
Mongidの場合gem 'delayed_job_active_record'
■マイグレーション
$ script/rails generate delayed_job:active_record
$ rake db:migrate
$ rake db:migrate
■delayed_jobで非同期に実行
1:.delayでメソッドを実行
.delayをつけることで、その場合のみ非同期に実行される
user.activate!(@device)
↓
user.delay.activate!(@device)
↓
user.delay.activate!(@device)
2:handle_asynchronouslyをメソッドに定義
常に非同期に実行される。
class Device何分後に実行するかなどのオプションも設定できる。
def deliver
# long running method
end
handle_asynchronously :deliver
end
handle_asynchronously :deliver, :run_at => Proc.new { 5.minutes.from_now }
■Capistranoレシピ
config/deploy.rb
require "delayed/recipes"
set :rails_env, "production" #added for delayed
before "deploy:restart", "delayed_job:stop"
after "deploy:restart", "delayed_job:start"
after "deploy:stop", "delayed_job:stop"
after "deploy:start", "delayed_job:start"
set :rails_env, "production" #added for delayed
before "deploy:restart", "delayed_job:stop"
after "deploy:restart", "delayed_job:start"
after "deploy:stop", "delayed_job:stop"
after "deploy:start", "delayed_job:start"