次のように、Rails 3 アプリでのアクション キャッシングに Memcached (実際には、Heroku の Memcachier) を使用します。
caches_action :index, :expires_in => 14.days
問題は、私のアプリが多数の異なるドメインからアクセスされ、コンテンツを変える必要があることです。現在、すべてのドメインで同じようにキャッシュされます。どうすればこれを達成できますか?
次のように、Rails 3 アプリでのアクション キャッシングに Memcached (実際には、Heroku の Memcachier) を使用します。
caches_action :index, :expires_in => 14.days
問題は、私のアプリが多数の異なるドメインからアクセスされ、コンテンツを変える必要があることです。現在、すべてのドメインで同じようにキャッシュされます。どうすればこれを達成できますか?
Railsのcaches_action
ドキュメントには次のように書かれています。
アクションキャッシングは、内部でフラグメントキャッシングを使用し、アラウンドフィルターを使用してジョブを実行します。フラグメントキャッシュは、リクエストのホストとパスに従って名前が付けられます。http://david.example.com/lists/show/1でアクセスされるページは 、david.example.com / lists / show/1という名前のフラグメントになります。これにより、キャッシャーはdavid.example.com/lists/とjamis.example.com/lists/を区別できます。これは、subdomain-as-account-keyパターンを支援するための便利な方法です。
したがって、生成されるキーはドメインごとに異なる必要があります。
それを確認するために、私はアプリケーションを作成し:mem_cache_store
、冗長モードでmemcachedサーバーを起動しました(-vv
)。
リクエスト/レスポンスは次のようになりましたhttp://localhost:3000/
:
<21 get views/localhost:3000/index
>21 END
<21 set views/localhost:3000/index 0 0 7123
>21 STORED
別のドメインでhttp://foobar:3000/
:
<21 get views/foobar:3000/index
>21 END
<21 set views/foobar:3000/index 0 0 7123
>21 STORED
リクエストに応じて異なるキャッシュキーを作成したいが、デフォルトでは不十分な場合は、の:cache_path
オプションを使用できますcaches_action
。
このSOの質問に例があります。