2017-06-16 1 views
0

J'essaie d'afficher un numéro à partir d'une API, mais je veux charger ma page plus rapidement. Donc, je voudrais obtenir le numéro de l'API toutes les 5 minutes, et il suffit de charger ce numéro sur ma page. C'est ce que j'ai. Cela fonctionne très bien, mais l'obtention de ce nombre à partir de l'API prend un certain temps, ce qui signifie que mon chargement de la page prend un peu de temps. Je veux consulter ce numéro à l'avance, puis toutes les cinq minutes. J'ai essayé d'utiliser des threads et des processus, mais je n'arrive pas à le comprendre. Je suis encore assez nouveau à la programmation.Impossible de lancer un processus en arrière-plan de l'application Sinatra

+0

Regardez dans l'utilisation de sidekiq et redis. Le travail Sidekiq fonctionnera en arrière-plan, récupérera ces données coûteuses et les stockera en redis, à partir desquelles la valeur sera lue par votre application sinatra. –

Répondre

1

Voici une manière assez simple d'obtenir des données dans un fil séparé. Quelque part en dehors de l'action du contrôleur, la boucle déclencher async:

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

Ensuite, dans votre action de contrôleur, vous pouvez simplement se référer à la Data[:number], et vous obtiendrez la dernière valeur. Toutefois, si vous déployez ceci, vous devez utiliser une gemme comme Resque ou Sidekiq; il va suivre les échecs et est probablement optimisé plus