8

私の人生のためにこれを理解することはできません。Rack :: Cacheを使用して、静的パブリックページの一部をHerokuにキャッシュしようとしています。さらに、リバースプロキシを通過した場合に備えてアクションキャッシュを実行しています。

たとえば、私の「ホーム」アクションのコードは次のとおりです。

class StaticPagesController < ApplicationController
  layout 'public'

  caches_action :about, :contact, ......, :home, .....

  ......

  def home
    last_modified = File.mtime("#{Rails.root}/app/views/static_pages/home.html.haml")
    fresh_when last_modified: last_modified , public: true, etag: last_modified
    expires_in 10.seconds, :public => true       
  end

すべての意図と目的のために、これには最大年齢10のパブリックキャッシュ制御タグが必要です。

$ curl -I http://myapp-staging.herokuapp.com/

HTTP/1.1 200 OK
Cache-Control: max-age=0, private, must-revalidate
Content-Type: text/html; charset=utf-8
Date: Thu, 24 May 2012 06:50:45 GMT
Etag: "997dacac05aa4c73f5a6861c9f5a9db0"
Status: 200 OK
Vary: Accept-Encoding
X-Rack-Cache: stale, invalid
X-Request-Id: 078d86423f234da1ac41b418825618c2
X-Runtime: 0.005902
X-Ua-Compatible: IE=Edge,chrome=1
Connection: keep-alive

私はひどく間違ったことをしていますか?その古くて無効なキャッシュ応答に何か問題があるように感じます...それは私がページにアクセスしたのは約4回目です。

構成情報:

# Use a different cache store in production
config.cache_store = :dalli_store

config.action_dispatch.rack_cache = {
  :verbose      => true,
  :metastore => "memcached://#{ENV['MEMCACHE_SERVERS']}",
  :entitystore => "memcached://#{ENV['MEMCACHE_SERVERS']}"#,
}

# OLD : Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = true
config.static_cache_control = "public, max-age=2592000"

(おそらく、cache-controlヘッダーを手動で設定する方法がありますか?もっと簡単な方法があるはずですが)。

アップデート

私はコントローラーのアクションを最小限に抑えようとしました:

def home
  expires_in 10.seconds, :public => true
  #last_modified = File.mtime("#{Rails.root}/app/views/static_pages/home.html.haml")
  #fresh_when last_modified: last_modified , public: true, etag: last_modified
end

そして、それは機能しません...

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 24 May 2012 19:15:18 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Status: 200 OK
X-Ua-Compatible: IE=Edge,chrome=1
Etag: "733798214c652f39ae79b4037e9111dc"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: b33087fe0c2ae986c4cac88f14420b7c
X-Runtime: 0.006000
X-Rack-Cache: stale, invalid
Vary: Accept-Encoding
X-Varnish: 349105873
Age: 0
Via: 1.1 varnish

4

1 に答える 1

1

たぶん、全体を考え直して、Railsキャッシングを使用するだけです。新しいcache_digestsgemは、Railsレベルでやりたいことを簡単に実行できるようにする必要があります: https ://github.com/rails/cache_digests

これは、ファイルシステム呼び出しを実行して10秒ごとにファイルのタイムスタンプをチェックすることを含むメソッドに勝るでしょう。

于 2013-03-08T18:36:32.223 に答える