vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

利用 resque-status 使客户端获得 resque job status

21:49 , vkill
比如我们登录成功的时候要执行一些 background jobs,那这里可能就会用 resque,那么有个问题就是登录成功后如何得知那些 background jobs 的状态呢? resque-status 这个gem就可以搞定了

先看下面的代码

require 'rubygems'
require 'pry'
require 'resque'

Resque.redis = 'localhost:6379'
Resque.redis.namespace = "resque:vkill.net"

require 'resque/job_with_status'
Resque::Status.expire_in = (24 * 60 * 60)

class SleepJob < Resque::JobWithStatus
  def perform
    total = options['length'].to_i || 1000
    num = 0
    while num < total
      at(num, total, "At #{num} of #{total}")
      sleep(1)
      num += 1
    end
    completed
  end
end

job_id = SleepJob.create(:length => 100)
status = Resque::Status.get(job_id)
binding.pry

=begin

[root@vkill-arch ~]# ruby resque-status_demo.rb

From: resque-status_demo.rb @ line 27 in Object#N/A:

    22:   end
    23: end
    24:
    25: job_id = SleepJob.create(:length => 100)
    26: status = Resque::Status.get(job_id)
=> 27: binding.pry
    28:
pry(main)> job_id
=> "60c3b710bdba012e7b916c55f9208b32"
pry(main)> Resque::Status.status_ids
=> ["60c3b710bdba012e7b916c55f9208b32",
"61858fb0bdb9012e7b906c55f9208b32",
"3b377730bdb9012e7b8f6c55f9208b32"]

=end



通过上面代码就可以理出思路, 登录成功后 执行 job,并把 job_id 存储在服务器端,然后把 job_id 返回给浏览器,浏览器就可以ajax 循环请求服务器来得知backgroud jobs 的执行情况了
Last modified by vkill on2011/09/10 21:50
类别:ruby & rails | Tags: , , , , | 0 条评论, 1555 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: