2012年10月17日水曜日

Railsでresque_schedulerを使う

config/initializers/resque.rb
require 'resque'
require 'resque_scheduler'
require 'resque_scheduler/server'
require 'resque/scheduler'

Resque.redis = 'localhost:6379'
Resque::Scheduler.dynamic = true

Rakefileに追記
require 'resque_scheduler/tasks'
全ての名前のQUEUEを動かす。
queueに入っているものを実行する。
rake environment resque:work QUEUE=*
resque_schedulerを動かす
rake resque:scheduler
config/routes.rb 下の記述を追加
mount Resque::Server, :at => "/resque"
require 'resque_scheduler'
  Test::Application.routes.draw do
    mount Resque::Server, :at => "/resque"
    resources :users do
      collection do 
        post 'send_mail'
        get 'send_mail'
      end
    end
  end
app/controllers/users.controller.rb
Queueに"word_analysis"という名前で10秒後に値を追加
require 'resque_scheduler'
require 'resque'
class UsersController < ApplicationController
  def index
    test
    respond_to do |format|
      format.html {render :text => :hello}
    end
  end
  
  def test
    #10秒後にqueueにHelloクラスを追加
    Resque.enqueue_at(10.seconds.from_now, Hello, {:id => 1})
  end
end

class Hello
  @queue = "word_analysis"
  def self.perform(options = {})
    puts options[:id]
  end
end

管理画面
http://localhost:3000/resque/
下のURIにアクセスするとQUEUEにHelloが追加されて10秒後に実行されます。
http://localhost:3000/users

0 件のコメント: