我有一个案例场景,我需要在后台运行多个记录更新(使用resque),我想给用户提供任务运行方式的可视指示(例如started/running/finished
)。
实现这一目标的一种方法(我能想到)是将当前状态保存到表中,然后通过简单的页面刷新向用户显示状态。
任何人都可以建议一个更好的解决方案吗?我想避免为此创建整个迁移,模型,控制器。
谢谢
正如我评论的那样,resque-status gem对你有用。我不确定这是否是一个答案,但因为你说你不想为此创建迁移,模型和控制器。因此,宝石可能是要走的路。
如果您能获得所需的状态,请从工作中获取,例如:
status = Resque::Plugins::Status::Hash.get(job_id)
status.working? #=> true
还有一个名为resque-web的前端,也检查出来。
你可以使用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