Je pense que le probleme ici est clairement que tu as une mauvaise conception (no offense) de ce qu'est un serveur web.
Deux choses en particulier
1) Un serveur web est une application qui ecoute un port en particulier et qui repond a des evenement http avec des connections dont la duree de vie est courte.
2) Un serveur web n'a pas pour but d'executer des taches de fond et de push les reponses a ses clients.
Ce n'est pas important que ce ne soit "qu'une seule page". Ce n'est pas le job d'un serveur web. Ca prend un process en continu qui n'est pas disponible pour les autres. Et c'est super inefficace que d'occuper un thread web pour executer des taches qui n'ont rien a voir avec "repondre a une requette http".
Une solution bien meilleure (mais pas forcement parfaite et y'en a probablement d'autres) serait que tu aies un demon qui execute la tache de fond, puis qui ecrive le resultat quelque part.
Le "quelque part" est important car les choix technologiques seront radicalement differents.
1) tu peux ecrire en db, dans une table de resultats. Tes clients web pull le serveur a intervale regulier, et ton serveur web se contente de choisir le bon data a leur envoyer. Ils peuvent par exemple, envoyer la derniere date a laquelle ils ont pull le serveur et le serveur leur envoie tout ce qui a ete ajoute apres cette date.
2) tu peux ecrire dans une websocket. Chaque fois que ton demon fini une boucle, il envoie une notif via le serveur websocket (qui n'est PAS le serveur web mais un serveur dedie) qui broadcastera a tous les clients connectes.
3) Tu peux mixer 1 et 2. Tu notifies via websocket mais tu enregistres aussi les resultats en db, comme ca quand quelqu'un charge la page, il peut recuperer les infos des X dernieres boucles (et tu as un historique ce qui permet eventuellement par la suite de calculer d'autres stats sur ce data).
Comme demon, tu peux soit te faire un petit script a la con et utiliser une gem pour "demoniser" le dit script. Y'a beaucoup de gems qui permettent de faire ca mais peu sont encore tres active. Tu peux aussi essayer de jouer avec activeJob / Sidekiq ... mais je le deconseille parce que, meme chose que pour le serveur web, si ton appli necessite beaucoup de jobs "spontanes", tu en paralyses un en permanence pour runner une boucle infinie.
My 2 cents