在一箇舊的Rails項目頁面緩存工作正如我在網上閱讀doc所期望的那樣,在Rails 3.1/3.2中,它的工作方式並不一樣。看起來Rails將頁面寫入磁盤,但從不使用它們(所以我認爲它將內存中的頁面緩存)。Rails 3.2何時使用它緩存到磁盤的頁面?
(請忍受我長的解釋,這並不複雜只是徹底...)
在一個新的Rails 3.2.2應用程序,我有以下幾點:
class HomeController < ApplicationController
caches_page :index
def index
expires_in 1.year, :private => false, :public => true
end
end
當我開始我的服務器在生產和訪問本地主機我看到:
cache: [GET /] miss, store
Started GET "/" for 127.0.0.1 at 2012-03-02 12:19:22 -0500
Processing by HomeController#index as HTML
Rendered home/index.html.erb within layouts/application (20.0ms)
Write page /home/sheldon/Dev/rails-3.2-app/public/index.html (0.4ms)
Completed 200 OK in 30ms (Views: 28.7ms | ActiveRecord: 0.0ms)
文件public/index.html出現在磁盤上。
我使用的是Firefox,如果我按Ctrl + R或SHIFT + CTRL + R我看到:
cache: [GET /] fresh
[2012-03-02 12:21:39] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
如果我編輯公共/ index.html的文件直接,然後按Ctrl + R或Ctrl + shift + r我沒有看到我對該文件所做的更改。
如果我打開一個軌道控制檯,然後輸入Rails.cache.clear
我看到:
=> ["/home/sheldon/Dev/rails-3.2-app/tmp/cache/9F4", "/home/sheldon/Dev/rails-3.2-app/tmp/cache/A9A"]
現在,如果我按Ctrl + R或CTRL + SHIFT + R我看到:
cache: [GET /] miss, store
Started GET "/" for 127.0.0.1 at 2012-03-02 12:37:04 -0500
Processing by HomeController#index as HTML
Rendered home/index.html.erb within layouts/application (0.0ms)
Write page /home/sheldon/Dev/rails-3.2-app/public/index.html (0.3ms)
Completed 200 OK in 2ms (Views: 1.2ms | ActiveRecord: 0.0ms)
而我的公共變化/index.html被覆蓋。
因此看起來public/index.html從來沒有使用過。
如果我編輯tmp/cache(在上面的控制檯輸出)中找到的html文件,然後ctrl + r或ctrl + shift + r,我仍然看不到直接對tmp/cache文件所做的更改。
如果我設置config.cache_store = :file_store, Rails.public_path + "/cache"
的行爲似乎是相同的。
入門指南Rails指出:「Rails將在公共目錄中提供任何靜態文件,優先於我們從控制器生成的任何動態內容」,但顯然情況並非如此。
它似乎只將頁面緩存在內存中,並且磁盤上的文件沒有被使用...... 任何人都可以解釋這裏發生了什麼,以及我如何緩存磁盤頁面?緩存內存中的所有頁面並不實際。謝謝!
Rails是否有可能將文件緩存在內存中的磁盤上(只有當它們不在內存中時才使用它們),然後當我執行Rails.cache.clear時,Rails實際上使內存緩存和磁盤上的文件無效? – Sheldno 2012-03-02 20:55:07