2017-06-16 44 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這樣的寶石;它將跟蹤故障並可能進行優化更多

相關問題