2010-11-30 3 views
1

이것은 다소 까다로운 문제 일 수 있습니다. 내 사이트의 '루트'페이지는 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로 캐시하는 방법을 알고 있습니까?

답변

0

사용중인 레일 버전은 무엇입니까? 이전 버전을 사용하고 있다면 업그레이드를 원할 수 있습니다. (.rxml 확장자는 afaik입니다.)

저에게는 버그 인 것 같습니다. 2 년 전 유사한 문제가 있었음을 기억합니다. IE는 XLS를 허용하지만 HTML은 언급하지 않습니다.

최근 버전에서는 수정 된 것으로 생각됩니다.

IE의 HTTP_ACCEPT 헤더를 수정하여이 문제를 해결했습니다. (예전의 코드를 좀 찾아보십시오)

그러나 나는 더 좋은 옵션을 시도하기 전에 이런 식으로하지 않는 것이 좋습니다.

+0

난 3.0.3 레일에 있습니다. 레일즈 소스를 실제로 열람했고 URL에 형식이 없으면 .html로 기본 설정됩니다. 실제로 처리 형식을 전혀 보지 않습니다.나는 사이트의 루트를 강요하여이를 수정했다 : format => HTML을 내 라우트 파일에 넣었지만 여전히 버그라고 생각한다! 또한 다른 인덱스 페이지의 잠재적 인 문제점을 볼 수 있으므로 실제로 고정되어 있지 않습니다. –

0

XML에 대한 요청을 /.xml으로 변경하면 다른 URL이되므로 HTML과 XML을 구분해야합니다.

Backbone.js 앱에서 이와 동일한 문제가있었습니다. /에서 /tasks 사이를 탐색 한 후 JSON 버전을로드하는 대신 Chrome이 캐시 된 HTML 버전 /tasks을 제공하는 다시 버튼을 누릅니다. 수정 사항은 내 백본 모델이 /tasks 대신 /tasks.js으로 전화했는지 확인하는 것이 었습니다. Rails 3.x 라우트는 URL 끝의 선택적인 부분으로 형식을 취하는데, 이는 브라우저와 서버 간의 모든 캐시가 accept/content-type 헤더를 보지 않을 경우 다른 형식을 구별하는 데 도움이됩니다.

관련 문제