我有一个案例场景,我需要在后台运行多个记录更新(使用resque),我想给用户提供关于任务运行方式的可视指示(例如started/running/finished
)。
实现这一目标的一种方法(我能想到)是将当前状态保存到表中,然后通过简单的页面刷新向用户显示状态。
有人能建议更好的解决方案吗?我想避免为此创建整个迁移,模型,控制器。
由于
答案 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