如何检查resque作业是否已完成

时间:2014-01-29 22:58:36

标签: ruby-on-rails resque

我有一个案例场景,我需要在后台运行多个记录更新(使用resque),我想给用户提供关于任务运行方式的可视指示(例如started/running/finished)。

实现这一目标的一种方法(我能想到)是将当前状态保存到表中,然后通过简单的页面刷新向用户显示状态。

有人能建议更好的解决方案吗?我想避免为此创建整个迁移,模型,控制器。

由于

2 个答案:

答案 0 :(得分:3)

正如我评论的那样,resque-status gem对你有用。我不确定这是否是一个答案,但因为你说你不想为此创建迁移,模型和控制器。因此,宝石可能是最佳选择。

从作业ID中,您可以获得所需的状态,例如:

status = Resque::Plugins::Status::Hash.get(job_id)
status.working? #=> true

还有一个名为resque-web的前端,也检查出来。

答案 1 :(得分:0)

您可以使用ruby的全局变量$var_name = 'foo'。但是我不确定,因为它们在Rails中被认为是不好的做法,但是在这种情况下,只要它们的名称非常独特,我就认为它们是合理的。 可以像这样(在resque的情况下)完成:

class UpdateJob
  @queue = data

  def self.perform
    $my_job_name_is_running = true
    MyJobName.new.run
    $my_job_name_is_running = nil
  end
end

然后您可以从应用程序中的任何位置访问它们:

while $my_job_name_is_running
  puts "job is running..." if $my_job_name_is_running
  sleep 3 # important to not overload your processor
end

Ruby全局变量不是很流行。检查文档以获取更多信息https://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/globalvars.html