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

问题描述 投票:3回答:2

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

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

任何人都可以建议一个更好的解决方案吗?我想避免为此创建整个迁移,模型,控制器。

谢谢

ruby-on-rails resque
2个回答
3
投票

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

如果您能获得所需的状态,请从工作中获取,例如:

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

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


0
投票

你可以使用ruby的全局变量$var_name = 'foo'。但是我不确定它,因为它们在轨道中被认为是不好的做法,但在这种情况下,只要它们的名称非常独特,我就认为它们是合理的。可以这样做(如果是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

© www.soinside.com 2019 - 2024. All rights reserved.