这可能有点棘手。我的网站的“根”页面由posts#index操作呈现。为了支持RSS和HTML,我有一个respond_to代码块,看起来像:Rails的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
我也有一个“caches_page”索引页面上设置。
如果有人在浏览器的网站,只是要求“/”,然后他们得到服务的页面的HTML版本,和Rails也写缓存页面的index.html
没有真的用XML格式请求“/”的任何方式,但是如果我点击“/posts.xml”它会呈现XML并缓存posts.xml(同样如果我点击“/ posts”或“/posts.html”它会缓存posts.html)。这一切都很好。
现在的棘手的一点。如果有什么要求“/”,但有一个接受头,如:
Accept: text/xml
然后Rails会过程它作为XML(可能是正确的),但CACHES为HTML,破坏我的缓存。该网站的下一个访问者将永远服务器实际上包含XML的html文件。这里是证明发生这种情况的Rails日志消息:
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上。我实际上浏览了rails源代码,如果URL中没有格式,则默认为.html。它实际上根本不考虑处理格式。我通过强制网站根目录来解决它:格式=> HTML在我的路线文件,但我仍然认为这是一个错误!另外,我可以看到其他索引页面的潜在问题,所以它根本就没有固定! – 2010-12-01 23:34:32