Railsの古いですか?サイトマップのための方法は、常にHTTP 200を返します
-
09-09-2019 - |
質問
私のRuby on Railsのアプリケーションは、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
私の理解では、内容が変更されていない場合stale?
メソッドはHTTP 304未Modified応答を確実にしなければならないということです。
$ 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
私は正しくstale?
メソッドを使用していますか?ローカルでこれをテストすることも可能ですか?
解決
あなたのRailsのコードがうまくている可能性がありますが、あなたのテストを実行すると、カールは、If-Modifiedの-Sinceヘッダを送信していません。 カールドキュメントするます:
時間条件
HTTPクライアントは、時間を指定することができます 文書それのための条件 リクエスト。変更された場合は、-のでそれはありますか もし非改変-以来。あなたができるようにするカール 時間-COND - -z /でそれらを指定します フラグます。
たとえば、あなたは簡単に作ることができます 場合にのみ行われますダウンロード リモートファイルはローカルより新しいです コピー。
:それは次のように行われることになりますカール-z local.html http://remote.server.com/remote.htmlする
それとも、場合にのみ、ファイルをダウンロードすることができます ローカルファイルには、リモートのより新しいです 1。日付を付加することでこれを行ってください ' - ' の文字列のように、:
カール-z -local.html http://remote.server.com/remote.htmlする
君は「フリーテキスト」の日付を指定することができます 調子。ダウンロードのみにカール知らせます それは以降に更新された場合は、ファイル 昨日ます:
カール-z昨日 http://remote.server.com/remote.htmlする
カールは、その後の広い範囲を受け入れます 日付形式。あなたはいつも日付を作ります によって他の方法で回避をチェック ダッシュでそれを付加 ' - '。