2017-06-16 53 views
0

我试图从api显示数字,但我希望我的页面加载速度更快。所以,我想每5分钟从api中获取数字,并将该数字加载到我的页面。这是我的。似乎无法在Sinatra应用程序背景中运行进程

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

这工作正常,但从api获取该号码需要一段时间,这意味着我的网页需要一段时间才能加载。我想提前查看该数字,然后每5分钟查看一次。我试过使用线程和进程,但我似乎无法弄清楚。我对编程还很陌生。

+0

查看使用sidekiq和redis。 Sidekiq作业将在后台运行,获取昂贵的数据并存储在redis中,由您的sinatra应用程序读取值。 –

回答

1

这是一个非常简单的方法来获取数据在一个单独的线程。某处控制器动作之外,断火异步循环:

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

然后在您的控制器动作,你可以简单地指的是Data[:number],你会得到最新的值。

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

相关问题