2009-12-31 7 views
1

Après avoir développé une application géniale sur ma machine locale sans aucune considération de la façon dont elle fonctionnerait sur mon hôte, j'ai rencontré un problème terrible. Je suis au service des fichiers (.pdf & .zip) à travers les rails send_file afin que je puisse enregistrer des statistiques. Le seul problème est que lorsque deux fichiers (ou plus) sont téléchargés simultanément, un nouveau processus ruby ​​dispatch.fcgi doit être démarré pour gérer chacun d'entre eux. Je comprends que cela pourrait être évité en utilisant mod_xsendfile, mais malheureusement, mon hôte ne supporte pas ce mod apache. Alors, voici la partie étrange. Ces processus sont créés comme prévu, mais pour une raison quelconque, ils ne sortent jamais. Comme un test, j'ai téléchargé environ 10 fichiers simultanément à partir d'un couple d'ordinateurs différents. Il y a eu environ 10 processus créés, mais aucun n'est jamais sorti. Même quelques minutes après leur invocation et même après que les téléchargements aient été terminés depuis longtemps.Pourquoi mes processus ruby ​​ne s'exécutent-ils pas sur mon serveur partagé FastCGI lors de l'utilisation de send_file?

Pourquoi ne sont-ils pas présents? Que puis-je faire pour éviter ce problème autre que basculer vers un hôte réel qui fournit un support pour mod_xsendfile?

Répondre

1

Si vous n'avez pas besoin de contrôler l'accès aux fichiers que vous proposez, vous pouvez toujours placer les fichiers sous/public ou dans une autre URL en dehors de l'application. Lorsqu'un utilisateur télécharge un fichier, il peut passer à une action du contrôleur qui met à jour les statistiques de téléchargement, puis redirige le navigateur de l'utilisateur vers le chemin où le fichier est réellement stocké en utilisant une balise meta refresh ou un peu de javascript . De cette façon, Apache va gérer le transfert de fichiers sans rails ... essentiellement ce que ferait xsendfile. D'un autre côté, passer à un autre hébergeur est probablement quelque chose qui vaut la peine d'être examiné s'il s'agit de quelque chose de plus qu'un projet sur lequel vous travaillez ... fastcgi est une façon assez désuète de servir une application sur rails à cette occasion point.

+0

+1 pour "fastcgi est assez archaïque". –