Pergunta

Eu tenho um app Rails que está funcionando bem, exceto por uma coisa.

Quando eu pedir algo que não existe (ou seja /not_a_controller_or_file.txt) e trilhos lança um "partidas nenhuma rota ..." exceção, a resposta é esta (linha intencional em branco):

HTTP/1.1 200 OK
Date: Thu, 02 Oct 2008 10:28:02 GMT
Content-Type: text/html
Content-Length: 122
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive

Status: 500 Internal Server Error
Content-Type: text/html

<html><body><h1>500 Internal Server Error</h1></body></html>

Eu tenho o ExceptionLogger plugin / fornecedor, no entanto, que não parece ser o problema. Eu ainda não adicionou nenhum erro de manipulação além da 500.html costume em público (embora a resposta não contém que o HTML) e não tenho idéia de onde este pedaço de html está vindo.

Assim Algo, em algum lugar está acrescentando que HTTP / 1.1 200 código de status muito cedo, ou o Status: 500 tarde demais. Eu suspeito que é Apache, porque eu recebo o apropriado / 1.1 500 cabeçalho HTTP (na parte superior) quando eu uso Webrick.

Meu pilha produção é a seguinte: Apache 2 Mongrel (5 casos) RubyOnRails 2.1.1 (acontece em ambos os 1.2 e 2.1.1)


Eu esqueci de mencionar, o erro é causado por um "sem rota partidas ..." exceção

Foi útil?

Solução

Esta é uma discussão bastante antiga, mas para o que vale a pena eu encontrei um grande recurso que inclui uma descrição detalhada do problema e da solução. Aparentemente, este bug afeta Rails <2.3 quando utilizado com Mongrel.

Outras dicas

Este arquivo HTML é proveniente de Rails. Ele está encontrando algum tipo de erro (provavelmente uma exceção de algum tipo, ou algum outro erro irrecuperável).

Se a linha em branco extra entre o Estado:. Cabeçalho e os cabeçalhos reais está lá, e não apenas um erro de digitação, então este seria um longo caminho para explicar por que Apache está relatando uma mensagem 200 OK

O cabeçalho Estado é como Rails, PHP, ou o que diz Apache "Houve um erro, por favor, devolva este código em vez de 200 OK". O fato há um vazio meio de linha algo extra está acontecendo e Ruby é produzir uma linha em branco antes da saída de erro por qualquer motivo. Talvez seja a saída anterior de seu script. O longo e curto do que é, porém, os meios de linha em branco extras que Apache pensa "Oh, linha em branco, há cabeçalhos extra, isso é tudo o conteúdo agora.", O que seria consistente com o cabeçalho Content-Length que você forneceu.

Meu palpite por que há uma linha em branco seria saída do script anterior, talvez uma linha que termina no final de uma página de roteiro totalmente. Quanto ao porquê do erro 500 está acontecendo, não há informações suficiente aqui para dizer-lhe isso. Talvez a / erro de arquivo S.

Editar: Dada a informação extra fornecida pelo Dave sobre os internos, eu diria que este é realmente um problema com o proxy que se passa nos bastidores ... eu não poderia dizer-lhe exatamente o que, porém, além do que já foi dito.

Esta é a vinda da própria trilhos.

http://github.com /rails/rails/tree/master/actionpack/lib/action_controller/dispatcher.rb#L60

O despachante é retornar uma página de erro com o código de status 200 (Sucesso).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top