rails 3 で Resque を使ってみた手順

Redis のインストール

https://github.com/defunkt/resque を参照。

git clone git://github.com/defunkt/resque.git
cd resque
rake redis:install dtach:install
rake redis:start
gem install bundler
bundle install

 

モニタリング用管理Webアプリ

resqueのgitレポジトリの中の管理アプリケーションを起動する。

cd resque/examples/demo
rackup config.ru

 

ブラウザで

http://localhost:9292/

のようにアクセスすることでアプリケーションが実行できる。

 

rails 3 で resque を使う

Gemfile を編集する。

vi Gemfile

 

以下の一行を追加。

gem 'resque'

 

Bundlerでインストール。

bundle install

 

config/initializers/resque.rb を作成し、以下を記述。

require 'resque'
Resque.redis = 'localhost:6379'

 

app/controllers/queue_controller.rb を作成し、以下を記述。

class QueueController < ApplicationController
def resque_push
Resque.enqueue(Echo, params[:data])
render :text => params[:data]
end
def resque_pop
data = Resque.reserve(:default)
end
end

 

app/workers/echo.rb を作成し、以下を記述。

class Echo
@queue = :default
def self.perform(text)
sleep 3
path = File.expand_path("log/echo.log", Rails.root)
File.open(path, 'a') do |f|
f.puts "Hello #{text}!"
end
end
end

 

lib/tasks/resque.rake を作成し、以下を記述。

require 'resque/tasks'

 

空のログファイルを作成。

touch log/echo.log

 

Railsサーバを起動。

rails server

 

http://localhost:3000/queue/resque_push?data=test

と呼び出すと、dataの値がキューに保存される。

 

また、

http://localhost:3000/queue/resque_pop

を呼び出すことで、キューからデータを取得する。

 

以下のようなコマンドでワーカーを起動すると、キューのジョブを処理する(今回の場合、log/echo.log にキューの内容が記録される)。

QUEUE=default rake environment resque:work