Pergunta

O meu Ruby on Rails aplicativo usa o seguinte código do controlador para gerar um arquivo sitemap.xml:

class SitemapController < ApplicationController
  layout nil

  def index
    headers['Content-Type'] = 'application/xml'
    last_post = Post.last
    if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
      respond_to do |format|
        format.xml { @posts = Post.sitemap } # sitemap is a named scope
      end
    end
  end
end

O meu entendimento é que o método stale? deve assegurar um HTTP 304 resposta não modificado se o conteúdo não mudou. No entanto, sempre que eu testar isso usando curl ou um navegador web eu sempre obter um HTTP 200:

$ curl --head localhost:3000/sitemap.xml
HTTP/1.1 200 OK
Connection: close
Date: Mon, 13 Apr 2009 15:50:00 GMT
Last-Modified: Wed, 08 Apr 2009 16:52:07 GMT
X-Runtime: 100
ETag: "5ff2ed60ddcdecf291e7191e1ad540f6"
Cache-Control: private, max-age=0, must-revalidate
Content-Type: application/xml; charset=utf-8
Content-Length: 29318

Am I usando o método stale? corretamente? Será que é mesmo possível testar isso localmente?

Foi útil?

Solução

é provável que o seu código Rails é apenas bom, mas onda não está enviando o If-Modified-Since quando você executar seu teste. Do onda docs :

CONDIÇÕES DE TEMPO

HTTP permite que um cliente para especificar uma hora condição para o que documento solicitações de. É If-Modified-Since ou Se-Unmodified-Since. Onda permitem que você especificá-los com o -z / - time-cond bandeira.

Por exemplo, você pode facilmente fazer uma download que só é realizada se o arquivo remoto é mais recente do que um local, cópia de. Ele seria feita como:

onda -z local.html http://remote.server.com/remote.html

Ou você pode baixar um arquivo somente se o arquivo local é mais recente do que a remota 1. Faça isso, antecedendo a data string com um '-', como em:

onda -z -local.html http://remote.server.com/remote.html

Você pode especificar uma data "texto livre", como doença. onda Diga aos única de download o arquivo se ele foi atualizado desde ontem:

onda -z ontem http://remote.server.com/remote.html

Onda, então, aceitar uma ampla gama de formatos de data. Você sempre fazer a data verifique o contrário por antecedendo-lo com um traço '-'.

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