2009-04-16 10 views
1

Nous avons la situation suivante:Rails/passager/Inconnu Type de contenu

  1. Nous invoquons une url qui exécute une action dans un contrôleur. L'action est assez longue - elle génère une grande chaîne de XML, génère un PDF et est censée rediriger une fois terminé.

  2. Au bout de 60 secondes environ, le browswer obtient un 200, mais avec le type de contenu de « application/x-contenu inconnu de type » pas de corps et sans en-tête de réponse (à l'aide Tamper regarder les en-têtes)

  3. l'action du contrôleur continue en fait de courir à la fin, la production du PDF

Ce qui se passe dans notre environnement de prod, mettre en scène l'action du contrôleur fonctionne à l'achèvement, la redirection comme prévu.

Des suggestions où chercher?

Nous utilisons Rails 2.2.2 sur Apache/Phusion Passenger.

Merci,

Répondre

1

Je ne suis pas sûr à 100%, mais probablement votre temps Apache sur la demande à l'application Rails. Pourriez-vous essayer d'augmenter la directive d'expiration de Apache? Quelque chose comme:

Timeout 120 
1

Je considère cognant cette tâche à une file d'attente hors d'emploi et de retourner immédiatement plutôt que de laisser à l'utilisateur de rester assis et attendre. Sinon, vous vous dirigez vers un monde de problèmes lorsque de nombreuses personnes essaient de l'utiliser et que vous n'avez plus d'instances d'application de rails disponibles pour gérer les nouvelles connexions. Une façon de le faire facilement pourrait être d'utiliser un poste Ajax pour déclencher la création du document, déposez-le en Delayed Job puis exécutez un contrôle périodique de 10 secondes via ajax informant l'utilisateur en attente de l'état des travaux. Une fois que late_job a fini de traiter votre tâche en arrière-plan et mis à jour quelque chose dans la base de données pour indiquer qu'elle est complète, vous pouvez rediriger l'utilisateur via ajax vers le document nouvellement créé.