Je travaille sur un projet Ruby on Rails sous Windows. J'ai Ruby 1.86 et Rails 2.35 installé. Tout va bien jusqu'à ce que j'ai essayé de mettre en œuvre un processus de comète. J'ai le code suivant écrit pour répondre à une longue demande de javascript de sondage. Mais à chaque fois que cette fonction est appelée, elle suspend le serveur de rails entier, aucune seconde requête ne peut entrer, jusqu'à l'expiration du délai. (Je sais qu'il y a un mastodonte, mais j'aime bien en implémenter un moi-même en premier :)Ruby rails loop provoque le blocage du serveur
Est-ce dû à la configuration de mon serveur? Le projet sera déployé sur un serveur Linux avec configuration Ngix et Passenger, va-t-il subir le même problème?
def comet_hook
timeout(5) do
while true do
key = 'station_' + station_id.to_s + '_message_lastwrite'
if Rails.cache.exist?(key)
@cache_time = DateTime.parse(Rails.cache.read(key))
if @cache_time > hook_start
@messages = @station.messages_posted_after(hook_start)
hook_start = @cache_time
break
end
end
end
...
end
également avec Rails cache de stockage de mémoire, je continue à obtenir l'erreur « ne peut pas modifier l'objet congelé », de sorte que le script ci-dessus ne fonctionnait pour moi quand je suis passé dans un fichier cache. :(