問題タブ [action-caching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - render :json をキャッシュする方法
JSON出力を返すコントローラーインデックスアクションがあります。
ここで使用する必要があるキャッシュの種類は何ですか。「ページキャッシング」はこれに意味がありますか。
または、以下のようにアクションキャッシングを行う必要がありますか
ruby-on-rails - Railsアクションキャッシングの質問
キャッシュが機能していることを確認する方法はよくわかりませんが、そうではないことは確かです。新しいユーザーが作成されるまでアクションをキャッシュするインデックス アクションを持つユーザー コントローラーがあります。コードは次のとおりです。
index
アクションにアクセスすると、ログに次のように表示されます。
が何なのかよくわかりませんし、毎回 ... が呼び出されてfilter chain halted ... did_not_yield
いることもわかりますが、これは私が期待したものではありません。select * from users
ここで何が起こっているのか、なぜこれが期待どおりに動作しないのかについて誰かが教えてくれますか? すなわち。そのアクションの出力全体がキャッシュされているはずなのに、なぜ User.all が実行されるのでしょうか?
ruby-on-rails - ユーザー固有のレコードの Rails アクション キャッシング
私は自分のアプリにキャッシュを実装しようとしているレール初心者です。memcached をインストールし、development.rb で次のように構成しました。
ログイン時にユーザー固有の製品を表示するコントローラー ProductsController があります。
問題は、私がとしてログインするときです
1) ユーザー A が初めて、レールがコントローラーにヒットし、製品アクションをキャッシュします。
2) ログアウトしてユーザー B としてログインすると、引き続きユーザー A としてログインし、ユーザー B ではなくユーザー A の製品が表示されます。コントローラーにもヒットしません。
キーはおそらくルートです。memcached コンソールでは、同じキーに基づいて取得していることがわかります。
アクションキャッシングは私が使用すべきものではありませんか? ユーザー固有の製品をキャッシュして表示するにはどうすればよいですか?
ご協力いただきありがとうございます。
ruby-on-rails - Heroku アクションのキャッシュが機能していないようです
Heroku でさまざまなキャッシング戦略を試し、アプリにアクション キャッシングを追加する目的で memcached アドオンを追加しました。
ただし、現在のアプリで Rails.cache.stats を表示すると (memcached がインストールされていて、dalli gem を使用している場合)、キャッシュする必要があるアクションを実行した後、current と total_items が 0 になります。
キャッシュしたいアクションを含むコントローラーの上部に次のものがあります。
また、環境設定(Herokuで実行されているもの用)を次のように変更しました
それが機能しているかどうか、または何か間違ったことをしたかどうかを確認するために見ることができる他の統計はありますか?
ruby-on-rails - カスタムcache_pathを使用してアクションキャッシュを期限切れにする
アプリケーションでアクションキャッシュを期限切れにするのに問題があります。
これが私のコントローラーです:
どういうわけかカスタムキャッシュパスをリセットできるようにする必要がありますが、その方法がわかりません。
私はすでにこのテクニックを使ってみましたが、成功しませんでした。私のキャッシュエンジンであるDalliは正規表現マッチャーをサポートしていないようです。
このコードを使用しようとすると、次のエラーが発生します。
expire_fragment(/songs/)
ActiveSupport::Cache::DalliStore does not support delete_matched
このコード行をデバッグに使用しようとしましたが、無視されています。
Rails 3.1.0.rc6、Dalli 1.0.5、Ruby1.9.2を使用しています。
ruby-on-rails - Rails 3 キャッシング: アクションおよびフラグメント キャッシングでスイーパーを使用してキャッシュを期限切れにするにはどうすればよいですか?
レストランのメニューを表示するページに取り組んでいます。私は 2 つのモデルを持っています: FoodMenu has_many :products と Product belongs_to :food_menu です。どちらのモデルのコントローラーも持っていません。代わりに、「pages_controller.rb」を使用して、各 FoodMenu とその製品を「menu」アクションで表示しています。
メニュー ページ (localhost:3000/menus) でアクション キャッシュを使用したいのですが、これは機能していますが、製品を更新、作成、または破棄するときにキャッシュを期限切れにすることができません。
「pages_controller.rb」の上部には、次のものがあります。
http://guides.rubyonrails.org/caching_with_rails.html#sweepersのサンプル コードを使用して、 app/sweepers に Product モデルと FoodMenu モデルの個別のスイーパーを作成しようとしましたが、うまくいきませんでした。次に、コントローラーが使用するすべてのモデルをスイーパーが監視することになっている SO エントリを読み込んだので、Product モデルと FoodMenu モデルの両方を監視し、"メニュー」アクション。それもうまくいきませんでした。私は何を間違っていますか?「pages_sweeper.rb」で私が今持っているものは次のとおりです。
ruby-on-rails - caches_action, :expires_in => 動的に設定
caches_action
私が見たすべての例は次のようになります。
expires_in
アクションで使用されるオブジェクトの有効期限に基づいて設定したいと思います。問題のオブジェクトはアクションに送信されることにexpires_in
基づいているため、設定時にそのオブジェクトを参照する方法はありますか?params
使ってみた
しかし、残念ながら、そこでパラメーターを参照することはできません。提案を歓迎します!
ruby-on-rails - キャッシュスイーパーをコントローラーで宣言する必要があるのはなぜですか?
キャッシュスイーパーは、監視しているモデルにいくつかのフックがあるオブザーバーです。
しかし、ドキュメントとガイドには、コントローラーでスイーパーを宣言することも記載されています。
どうしてこれなの?モデルを観察して行動するという観察者のポイントではないでしょうか。コントローラーは、キャッシュがいつ期限切れになるか、または何が原因であるかを認識する必要はありませんか?
明確化
スイーパーをオブザーバーとして設定することについての私の理解は、「すべての場合において、MyModelが更新されたら、このクリーンアップコードを実行する」ことを意味するということです。
- それは正確ですか?
- もしそうなら、なぜ
cache_sweeper :my_sweeper
コントローラーで宣言する必要があるのですか?それは何をしますか?
ruby-on-rails - Rails caches_action は before_filters をスキップしています
show アクションをキャッシュしているコントローラーがあります。show アクションには、ユーザーがログインしていない場合や現在のグループのメンバーではない場合などに実行およびリダイレクトすることを目的とした、セキュリティのための多数の before フィルターがあります。これらの before フィルターは、キャッシュをオンにしていない場合に完全に機能しますが、フィルターが実行されなくなる前に、スイッチを切り替えてキャッシュをオンにすると (私のデバッガー呼び出しはヒットしません)。
フィルターがキャッシュされたアクションに対して呼び出される前に、これがページ キャッシングとアクション キャッシングの主な違いであることを常に理解しています。これは、アクションキャッシングに関する Rails Caching Tutorial セクションによって裏付けられています。
アクション キャッシングはページ キャッシングと同じように機能しますが、受信した Web リクエストが Web サーバーから Rails スタックとアクション パックに送られ、キャッシュが提供される前にフィルターを実行できるという点が異なります。これにより、キャッシュされたコピーからの出力結果を提供しながら、認証やその他の制限を実行できます。
では、なぜ私の before フィルターが呼び出されないのでしょうか?
私のセットアップについて少し: 認証にDeviseを使用するRails 3.1。memcached ストアに dalli gem を使用しています。
ここに私のコードを要約したいくつかのコードがあります(多くの粗雑な部分が切り取られています):
それで、誰かが前にこの行動を見たことがありますか?フィルタとアクション キャッシングがどのように機能するかについて、私の理解に穴がありますか? それとも、宝石バージョンの奇妙な組み合わせで奇妙なブードゥーが起こっているのでしょうか?
[編集]
興味深いことに、戻り値は、チェーンに沿ってさらにメソッドが実行されるかどうかに影響を与えないことを知りました。それは、リダイレクトまたはレンダリングが呼び出されるかどうかです。
[編集2]
アプリを rails 3.2.3 にアップグレードして効果があるかどうかを確認しましたが、問題は解決しませんでした。私が発見したことは、ApplicationController で定義された before フィルターが呼び出されているが、GroupsController のものは呼び出されていないことです。
ruby-on-rails-3 - rails3 キャッシング: caches_action(GET) によってキャッシュされたパラメータを持つ expire_action
何かを入力するときに ajax 呼び出しを行って結果を取得する検索機能に取り組んでいます。検索キーワードを使用して検索アクションを memory_cache にキャッシュしたいので、次のようにします。
私の質問は、パラメーターを使用してアクションを期限切れにするにはどうすればよいですか? 私の機能を動作させる別の方法はありますか?