2010-12-10 53 views
1

Je suis en train de capturer des événements de clic de lien et de les transférer via ajax, en particulier le getScript de jquery.Rails respond_to format - extension .js requise?

En tout développement fonctionne très bien en ce qui concerne pour répondre à formater

respond_to do |format| 
    format.html { 
    #by default renders show.html.haml 
    } 
    format.js { 
    #by default renders show.js.erb 
    } 
end 

Ce comportement ne prend pas en quelque sorte dans la production sur Heroku et le fichier html est toujours retourné. Si j'ajoute l'extension du fichier et que je définis la reconnaissance du format sur la route, alors cela fonctionne bien, mais je pensais que ce n'était pas nécessaire?

Merci d'avance.

+0

Pour réduire cela, je comparerais la requête HTTP et les en-têtes de réponse pour votre requête getScript en développement et en production. Faites attention à la demande d'acceptation de la demande et au type de contenu pour la réponse. Sont-ils différents? – aceofspades

+0

Merci pour votre réponse. La seule différence est l'en-tête de réponse, dev text/javascript et le texte de production/html. – mark

+0

Peut-être connecter l'en-tête de la demande dans l'action avant de répondre à? – aceofspades

Répondre

2

Si quelqu'un trouve cela, je vais vous expliquer ce que je faisais mal. Je me sers de la mise en œuvre de vernis d'heroku pour accélérer une application. Qu'est-ce qui se passe est une page Web dynamique générée précédemment est téléchargée à partir de vernis, puis appels javascript à la maison à la même URL pour vérifier les mises à jour de la page. Cela améliore considérablement les temps de réponse des pages au détriment des utilisateurs non-js et des moteurs de recherche susceptibles d'afficher un contenu légèrement obsolète.

Apparemment, le vernis ne fait pas la distinction entre les en-têtes acceptées et le code HTML précédemment mis en cache m'a été retourné. Pour résoudre ce problème, j'ai simplement ajouté un paramètre d'horodatage à la requête ajax.

+1

Bien sûr! C'est pourquoi je suis en désaccord avec l'axiome de "Opacité URI". Les caches respectent souvent les en-têtes HTTP. Plutôt que de désactiver entièrement les caches, cela signifie que vous devez soit ajouter un suffixe (c'est-à-dire .js) à l'URI, soit ajouter un paramètre de requête. Cela apparaît également lorsque vous accédez à une URI à la fois en tant que requête HTTP standard et en tant que XHR. – aceofspades