이것은 다소 까다로운 문제 일 수 있습니다. 내 사이트의 '루트'페이지는 posts # index 액션에 의해 렌더링됩니다. 나는 또한 인덱스 페이지 설정 'caches_page'을 가지고레일스는 respond_to XML을 처리하지만 캐시합니다. HTML
respond_to do |wants|
wants.html
wants.xml {
render :layout => false;
response.headers["Content-Type"] = "application/xml; charset=utf-8"
}
end
: RSS와 HTML을 지원하기 위해, 나는처럼 보이는 respond_to 블록을 가지고있다.
누군가가 브라우저에서 사이트에 와서 그때가 페이지의 HTML 버전을 제공받을, "/"요청하고이 없습니다
레일도 index.html을 위해 캐시 된 페이지를 쓰는 경우 정말 어떤 식 으로든 XML의 형식으로 "/"를 요청할 수 있지만 "/posts.xml"을 누르면 XML 및 캐시 posts.xml이 렌더링됩니다 (비슷하게 "/ posts"또는 "/posts.html"을 누르면됩니다). cache posts.html). 그것 모두 잘 작동합니다.
이제 까다로운 문제입니다. 만약 어떤 요청 "/"하지만이 같은 동의를 헤더 :
Accept: text/xml
그리고 레일 것이다 과정 그것은 XML (아마 정확한),하지만 내 캐시를 파괴 HTML로 캐시을, 등. 다음 방문자는 영원히 XML 파일을 포함하는 html 파일입니다. 다음은 레일스 로그 메시지입니다.
Started GET "/" for 127.0.0.1 at 2010-11-30 20:47:27 +0000
Processing by PostsController#index as XML
Post Load (1.4ms) SELECT "posts".* FROM "posts" WHERE ...
Rendered posts/index.xml.rxml (243.8ms)
Write page /..../index.html (0.6ms)
Completed 200 OK in 423ms (Views: 244.8ms | ActiveRecord: 1.4ms)
이것은 기능 또는 버그입니까?
더 나은 방법을 고쳐서 XML로 처리 할 때 파일을 .xml로 캐시하는 방법을 알고 있습니까?
난 3.0.3 레일에 있습니다. 레일즈 소스를 실제로 열람했고 URL에 형식이 없으면 .html로 기본 설정됩니다. 실제로 처리 형식을 전혀 보지 않습니다.나는 사이트의 루트를 강요하여이를 수정했다 : format => HTML을 내 라우트 파일에 넣었지만 여전히 버그라고 생각한다! 또한 다른 인덱스 페이지의 잠재적 인 문제점을 볼 수 있으므로 실제로 고정되어 있지 않습니다. –