0

そのため、同じコントローラーを使用して、サイトのモバイル ビューとデスクトップ ビューの両方を提供しています。また、ページの html を memcache にキャッシュするために、アクション キャッシュを頻繁に使用します。すべてのモバイル リクエストのキャッシング プレフィックスを、標準の「views/」ではなく「views-mobile/」にグローバルに変更する方法を見つけようとしています。これにより、モバイル ページとデスクトップ ページが別の名前空間に保存されるため、memcache で競合が発生しなくなります。

これは、is_mobile? のコントローラー変数を使用してカスタム cache_path を作成することにより、caches_action メソッドごとに実行できますが、何らかの方法でグローバルに実行することをお勧めします。助言がありますか?これにはモンキー パッチの ActionController::Caching が必要になると思いますが、「views/」プレフィックスが生成される場所がわかりません。

4

2 に答える 2

0

私は実際にこれを自分で理解することになりました。基本的に、ActionController::Base は fragment_cache_key と呼ばれる関数を使用して、特定のフラグメントのキャッシュ キーを生成します (これは、ActionCaching が深く使用するものです)。したがって、基本的にそのメソッドをオーバーライドし、プレフィックスを生成する独自のロジックを含めます。これは私のメソッドのオーバーライドがどのように見えるかです:

# Monkey patch fragment_cache_key
def fragment_cache_key(key)
    ActiveSupport::Cache.expand_cache_key(key.is_a?(Hash) ? url_for(key).split("://").last : key, mobile_device? ? "views-mobile" : "views")
end

mobile_device? は、ユーザーがサイトのモバイル バージョンとデスクトップ バージョンのどちらを要求しているかを把握する独自の関数です。

于 2013-08-06T17:17:17.947 に答える
0

すみません、Rails nubie だったので質問の意味がよくわかりませんが、もしよろしければそういうことでしょうか?

これは私のroutes.rbにあります:

scope "/administrator" do
   resources :users
end

users_path「プレフィックス」をに変更しましたadministrator。違ったらごめんなさい:D

于 2013-07-10T07:00:32.967 に答える