Nous venons de sécuriser notre application avec un certificat SSL. Le passage à HTTPS s'est avéré plus complexe que nous le pensions et nous sommes en train de trier quelques-uns des bugs qui en résultent.Rails 4 - MissingTemplate/Erreur partielle manquante, uniquement en production
Nous avons un appel AJAX dans CoffeeScript, où les rails répond en rendant le html d'un partiel. Cela fonctionne parfaitement dans le développement.
CoffeeScript:
coffee_method: (pos, uid) =>
$.ajax '/contoller/test/',
type: 'POST'
data:
pos: pos
uid: uid
success: (data) ->
$('#result-div').html(data) #Populates side menu with _next_destination_menu content
error: ->
alert 'How embarassing! Something went wrong - please try your search again. '
Controller:
def test
... #do some stuff
puts "format requested: #{request.format}"
puts "format url_encodeded: #{request.format.url_encoded_form?}"
render partial: 'trips/_test' #app/views/trips/_test.html.erb
end
Cependant, dans la production, nous obtenons l'erreur suivante: ActionView::MissingTemplate (Missing partial trips/_test with {:locale=>[:en], :formats=>[:url_encoded_form], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}.
Après quelques recherches, je me suis dit à la demande dans la production était un format différent. En utilisant ces lignes puts
dans le contrôleur de débogage, voici les résultats:
Production:
format requested: application/x-www-form-urlencoded
format url_encodeded: true
Développement:
format requested: */*
format url_encodeded: false
Quelle est la meilleure façon de traiter cette question. Est-ce que je:
- Modifier le type de contenu de chaque appel AJAX dans le CoffeeScript?
- Ajouter un
respond_to...format.url_encoded_form {render partial: trips/test}
au contrôleur?
Ce dernier semble que je serais la duplication de code, parce que je veux rendre la même partielle, quel que soit le format de la demande entre en jeu. J'ai essayé format.all {...}
mais a rencontré le même problème. Toutes les meilleures pratiques sont appréciées!
Mise à jour:
Spécification de la réponse de type me donne directement la même erreur de modèle manquant:
respond_to do |format|
format.html {render partial: 'trips/test'}
format.json {render partial: 'trips/test' }
format.url_encoded_form {render partial: 'trips/test'}
end
Mise à jour 2:
Les têtes de requête pour les deux localhost et la production sont De même, le type de contenu est application/x-www-form-urlencoded
, même si format.url_encoded_form?
renvoie la valeur false.
Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4
Connection:keep-alive
Content-Length:37
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Utilisez-vous un proxy (comme nginx?) Qui pourrait être modifier la demande? –
@NickTomlin - Je ne crois pas que nous utilisions un proxy, mais nous utilisons AWS CloudFront pour une distribution Web. – CHawk