さかめも

株とブログとプログラミングで生活している東京在住のフリーランス。このブログには毎月10万人が訪れます。田舎で生まれ、上京して7年。大手SIer → ウェブ系ベンチャー → スタートアップ創業期を経験したのちフリーランスに。お金持ちにならなくていいから好きなことをしたい。好きなことを続けるためにお金が欲しい。

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