2

Wir haben unsere Anwendung gerade mit einem SSL-Zertifikat gesichert. Der Umstieg auf HTTPS erweist sich als komplexer, als wir gedacht haben, und wir sortieren derzeit einige der resultierenden Fehler.Schienen 4 - MissingTemplate/Fehlender Teilfehler, nur in Produktion

Wir haben einen AJAX-Aufruf in CoffeeScript, wo Schienen reagiert, indem der HTML-Code einer partiellen. Dies funktioniert perfekt in der Entwicklung.

Coffee:

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 

jedoch in der Produktion, so erhalten wir die folgende Fehlermeldung: ActionView::MissingTemplate (Missing partial trips/_test with {:locale=>[:en], :formats=>[:url_encoded_form], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}.

Nach einigem Graben, ich die Anfrage in der Produktion heraus war ein anderes Format. Unter Verwendung dieser puts Linien in der Steuerung zu debuggen, hier sind die Ergebnisse:

Produktion:

format requested: application/x-www-form-urlencoded 
format url_encodeded: true 

Entwicklung:

format requested: */* 
format url_encodeded: false 

Was ist der beste Weg, um dieses Problem zu behandeln. Do I:

  • Ändern Sie den Inhaltstyp jedes AJAX-Aufrufs im CoffeeScript?
  • Fügen Sie eine respond_to...format.url_encoded_form {render partial: trips/test} zur Steuerung hinzu?

Letzteres scheint, wie ich Code werden duplizieren würde, weil ich das gleiche Teil machen möchten, unabhängig vom Format der Antrag kommt. Ich habe versucht, format.all {...} aber das gleiche Problem aufgetreten. Alle Best Practices werden geschätzt!

Update:

die Antwort geben Angeben direkt gibt mir die gleiche fehlende Vorlage Fehler:

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 

Update 2:

Die Anfrage-Header für beide localhost und Produktion Derselbe Inhaltstyp ist application/x-www-form-urlencoded, obwohl format.url_encoded_form? false zurückgibt.

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 
+0

Verwenden Sie einen Proxy (wie nginx?), Der die Anfrage zu verändern könnte? –

+0

@NickTomlin - Ich glaube nicht, dass wir einen Proxy verwenden, aber wir verwenden AWS CloudFront für eine Web-Distribution. – CHawk

Antwort

2

Sie könnten versuchen, in das Format, die locale vorbei, und Handler genau wie gewünscht:

render(
       partial: 'trips/test', 
     formats: [:html, :js, :json, :url_encoded_form], 
     locale: [:en], 
     handlers: [:erb, :builder, :raw, :ruby, :coffee, :jbuilder])