小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

RubyonRails Page Cache 的擴(kuò)展名問(wèn)題

 昵稱(chēng)xEu4P 2007-01-17

RubyonRails Page Cache 的擴(kuò)展名問(wèn)題

@由 DIrk 發(fā)表于 2007-01-12 Friday

RubyonRails 的 Page Cache 默認(rèn)是將緩存的文件報(bào)存到 Base.page_cache_directory 目錄中(默認(rèn)是 Rails 項(xiàng)目的 public 目錄);并且,在默認(rèn)設(shè)置下會(huì)冠以 .html 擴(kuò)展名,但這里有一個(gè)特殊的處理:如果你請(qǐng)求的 URL 地址最后部分包含了“.”符號(hào),Rails 就不會(huì)增加這個(gè)緩存擴(kuò)展名,而是直接根據(jù)請(qǐng)求的文件名進(jìn)行保存。比如我的一篇網(wǎng)志中設(shè)置了這個(gè)標(biāo)簽:docs., 這個(gè)時(shí)候,Rails會(huì)將 /tag/docs. 直接緩存為 /public/tag/docs. 文件,而不是我所期望的 /public/tag/docs..html;這個(gè)擴(kuò)展名的差別,致使 Web 服務(wù)器向?yàn)g覽器發(fā)送錯(cuò)誤的 MIME 頭,使用戶在訪問(wèn)被緩存的 /tag/docs. 頁(yè)面時(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 name
end

可以看到,Rails 對(duì)緩存文件的名稱(chēng)進(jìn)行了檢查,如果名稱(chēng)中包含“.”符號(hào),那么不再追加緩存文件擴(kuò)展名(.html)。從某種程度上來(lái)說(shuō),這是一種正確的思路,因?yàn)橛脩粲? 可能就是期望緩存一個(gè)特殊格式的文件,比如 .pdf 文檔或者 .png 圖片等,但對(duì)于我的 Blog 卻是得到了錯(cuò)誤的結(jié)果。

我覺(jué)得,更合理的方式是為 action_controller/caching.rb 增加一個(gè)開(kāi)關(guān),根據(jù)這個(gè)開(kāi)關(guān)來(lái)決定是否檢測(cè)文件名中包含“.”而不再追加擴(kuò)展名,這個(gè)開(kāi)關(guān)應(yīng)該象其他參數(shù)一樣,可以通過(guò)環(huán)境設(shè)置文件進(jìn)行指定。

目前,我是偷懶,直接修改了 action_controller/caching.rb 源代碼,等有時(shí)間再寫(xiě)一個(gè)完善一些的 patch:

  def page_cache_file(path)
name = ((path.empty? || path == "/") ? "/index" : URI.unescape(path))
name << page_cache_extension
return name
end

標(biāo)簽:rubyonrails,page cacheextension

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多