2009-04-13 22 views
5

My Ruby on Rails ứng dụng sử dụng các mã điều khiển sau đây để tạo ra một file sitemap.xml:Cũ của Rails? phương pháp để sitemap luôn trả về HTTP 200

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 

sự hiểu biết của tôi là phương pháp stale? phải đảm bảo một HTTP 304 Not Modified phản ứng nếu nội dung không thay đổi. Tuy nhiên, bất cứ khi nào tôi thử nghiệm này sử dụng curl hoặc một trình duyệt web tôi luôn luôn nhận được một 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 

Tôi sử dụng phương pháp stale? chính xác? Thậm chí có thể thử nghiệm địa phương này không?

Trả lời

4

có khả năng mã Rails của bạn là tốt nhưng curl không gửi tiêu đề If-Modified-Since khi bạn thực hiện thử nghiệm của mình. Từ curl docs:

ĐIỀU KIỆN THỜI GIAN

HTTP cho phép một khách hàng để xác định một điều kiện thời gian cho tài liệu nó yêu cầu. Đó là Nếu được sửa đổi từ hoặc Nếu không sửa đổi. Curl cho phép bạn chỉ định chúng bằng cờ -z/- time-cond .

Ví dụ: bạn có thể dễ dàng thực hiện tải xuống chỉ được thực hiện nếu tệp từ xa mới hơn bản sao cục bộ. Nó sẽ được thực hiện như:

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

Hoặc bạn có thể tải về một tập tin duy nhất nếu tập tin địa phương mới hơn xa một. Làm điều này bằng prepending chuỗi ngày với một '-', như trong:

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

Bạn có thể chỉ định một "văn bản miễn phí" ngày như điều kiện. Nói với curl để chỉ tải file nếu nó đã được cập nhật kể từ ngày hôm qua:

curl -z hôm qua http://remote.server.com/remote.html

Curl sau đó sẽ chấp nhận một loạt các định dạng ngày. Bạn luôn luôn làm cho ngày kiểm tra cách khác xung quanh bằng cách thêm vào trước bằng dấu gạch ngang '-'.

+0

Cảm ơn Adam, đúng vậy. –

+0

Thật tuyệt vời, tôi hy vọng nó sẽ hữu ích cho bạn. Cảm ơn các cập nhật! –

Các vấn đề liên quan