似乎无法在Sinatra应用程序的后台运行一个过程

时间:2017-06-16 16:32:10

标签: ruby sinatra

我试图在api中显示一个数字,但我希望我的页面加载速度更快。所以,我想每隔5分钟从api获取一个号码,然后将该号码加载到我的页面。这就是我所拥有的。

get '/' do
  x = Numbersapi.new
  @number = x.number
  :erb home
end

这样可以正常工作,但从api获取该数字需要一段时间,这意味着我的页面需要一段时间才能加载。我希望提前查看这个数字,然后每隔5分钟查看一次。我尝试过使用线程和进程,但我似乎无法弄明白。我还很擅长编程。

1 个答案:

答案 0 :(得分:1)

这是一种在单独的线程中获取数据的简单方法。在控制器操作之外的某处,触发异步循环:

Data = {}
numbers_api = Numbersapi.new
Thread.new do
  Data[:number] = numbers_api.number
  sleep 300 # 5 minutes
end

然后在您的控制器操作中,您只需引用Data[:number],即可获得最新值。

但是如果你正在部署它,你应该使用像Resque或Sidekiq这样的宝石;它将跟踪故障并且可能更加优化