Rails 3.1 / 3.2 では、Rails 3.1 / 3.2 では同じようには機能しません。Rails はページをディスクに書き込みますが、それらを使用しないように見えます (そのため、メモリにページをキャッシュしていると思います)。
(私の長い説明をご容赦ください。複雑ではありません...)
新しい Rails 3.2.2 アプリには、次のものがあります。
class HomeController < ApplicationController
caches_page :index
def index
expires_in 1.year, :private => false, :public => true
end
end
サーバーを本番環境で起動して localhost にアクセスすると、次のように表示されます。
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
public/index.html ファイルを直接編集して ctrl+r または ctrl+shift+r を押しても、ファイルに加えた変更が表示されません。
Rails コンソールを開いて入力すると、次のよう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)
また、public/index.html への変更は上書きされます。
そのため、 public/index.html は使用されていないようです。
tmp/cache (上記のコンソール出力) で見つかった html ファイルを編集してから ctrl+r または ctrl+shift+r を編集しても、tmp/cache ファイルに直接行った変更は表示されません。
私が設定した場合config.cache_store = :file_store, Rails.public_path + "/cache"
、動作は同じようです。
Getting Started Rails Guide には、「Rails は、コントローラから生成した動的コンテンツよりも優先して public ディレクトリ内の静的ファイルを配信します」と書かれていますが、明らかにそうではありません。
ページはメモリにのみキャッシュされ、ディスク上のファイルは使用されていないようです...ここで何が起こっているのか、ディスクにページをキャッシュする方法を誰かが説明できますか? すべてのページをメモリにキャッシュするのは現実的ではありません。ありがとう!