打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
RubyonRails Page Cache 的扩展名问题

RubyonRails Page Cache 的扩展名问题

@由 DIrk 发表于 2007-01-12 Friday

RubyonRails的 Page Cache 默认是将缓存的文件报存到 Base.page_cache_directory 目录中(默认是 Rails 项目的public 目录);并且,在默认设置下会冠以 .html 扩展名,但这里有一个特殊的处理:如果你请求的 URL 地址最后部分包含了“.”符号,Rails 就不会增加这个缓存扩展名,而是直接根据请求的文件名进行保存。比如我的一篇网志中设置了这个标签:docs.dirk.sh,这个时候,Rails会将 /tag/docs.dirk.sh 直接缓存为 /public/tag/docs.dirk.sh文件,而不是我所期望的 /public/tag/docs.dirk.sh.html;这个扩展名的差别,致使 Web 服务器向浏览器发送错误的 MIME 头,使用户在访问被缓存的 /tag/docs.dirk.sh 页面时,可能直接显示源代码或者提示下载。

研究一下 RoR 的源代码,从 action_controller/caching.rb 文件中找到以下代码:

  def page_cache_file(path)name = ((path.empty? || path == "/") ? "/index" : URI.unescape(path))name << page_cache_extension unless (name.split(‘/‘).last || name).include? ‘.‘return nameend

可以看到,Rails对缓存文件的名称进行了检查,如果名称中包含“.”符号,那么不再追加缓存文件扩展名(.html)。从某种程度上来说,这是一种正确的思路,因为用户有可能就是期望缓存一个特殊格式的文件,比如 .pdf 文档或者 .png 图片等,但对于我的 Blog 却是得到了错误的结果。

我觉得,更合理的方式是为 action_controller/caching.rb 增加一个开关,根据这个开关来决定是否检测文件名中包含“.”而不再追加扩展名,这个开关应该象其他参数一样,可以通过环境设置文件进行指定。

目前,我是偷懒,直接修改了 action_controller/caching.rb 源代码,等有时间再写一个完善一些的 patch:

  def page_cache_file(path)name = ((path.empty? || path == "/") ? "/index" : URI.unescape(path))name << page_cache_extensionreturn nameend

标签:rubyonrailspage cacheextension

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
清除指定Squid缓存文件的脚本
编程方式刷新Squid缓存服务器的五种方法
nginx proxy_cache 代理缓存
smarty配置
在Windows上像Unix一样开发(转载)
Java Cache 实践
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服