古いRailsプロジェクトのページキャッシュは、オンラインでdocを読むことから期待通りに動作しますが、Rails 3.1/3.2では同じように動作しません。 Railsはページをディスクに書き込むが、決してそれらを使用しないように見える(したがって、私はそれがメモリ内のページをキャッシュしていると仮定する)。私は、次のを持って新しいのRails 3.2.2アプリでRails 3.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がディスクに表示されます。私はCtrl + Rキーまたはシフト+ CTRL + rが、私が見た場合、私は、Firefoxを使用してい
:
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
を入力した場合、私は以下を参照してください。私は+ RまたはCtrl + Shift + RをCTRL場合
=> ["/home/sheldon/Dev/rails-3.2-app/tmp/cache/9F4", "/home/sheldon/Dev/rails-3.2-app/tmp/cache/A9A"]
は今、私は以下を参照してください。
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"
と設定した場合の動作は同じです。
Getting Started Rails Guideでは、「Railsは、コントローラから生成する動的コンテンツよりもパブリックディレクトリに静的ファイルを配信します」と述べていますが、これは当てはまりません。
ページがメモリにのみキャッシュされ、ディスク上のファイルが使用されていないようです... ここで何が起こっているのか、どのようにディスク上のページをキャッシュできるのか誰でも説明できますか?メモリ内のすべてのページをキャッシュするのは現実的ではありません。ありがとう!
Rack::Cache
- ページのキャッシュ
ページキャッシュがcaches_page
がオン、および/公共の場でのファイルの書き込みを行うものです:
私はRails.cache.clearを実行すると、Railsは実際にメモリキャッシュとディスク上のファイルを無効にすることができます(メモリにディスクがない場合にのみ使用します) ? – Sheldno