2010-04-14 9 views
1

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. :(

Répondre

0

l'installation de Windows se compose probablement d'un seul webrick ou mongrel instance qui peut gérer qu'une seule connexion à la fois.

Passeger et nginx configurations peuvent (et typiquement volonté), bien sûr, tenir compte des sessions simultanées multiples par un groupe de processus de serveurs web (que ce soit un groupe mongrel derrière nginx, ou un groupe de processus de travail de passagers Apache), si elle est configurée pour le faire (la valeur de configuration servers pour mongrel clusters, MaxClients pour Apache/passager.)

Mettre à l'échelle le nombre de sessions client simultanées et/ou la mémoire système en fonction du trafic attendu (par ex. Si vous attendez 10 requêtes/seconde, où chaque requête peut prendre jusqu'à 5s ou plus, vous devrez accepter 50 connexions client ou plus, soit 50 serveurs Mongrel ou plus dans le cluster ou 50 processus de travail Apache ou plus - avec exigences de mémoire non triviales.)