問題タブ [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.

0 投票する
2 に答える
5000 参照

ruby-on-rails - render :json をキャッシュする方法

JSON出力を返すコントローラーインデックスアクションがあります。

ここで使用する必要があるキャッシュの種類は何ですか。「ページキャッシング」はこれに意味がありますか。

または、以下のようにアクションキャッシングを行う必要がありますか

0 投票する
1 に答える
1195 参照

ruby-on-rails - Railsアクションキャッシングの質問

キャッシュが機能していることを確認する方法はよくわかりませんが、そうではないことは確かです。新しいユーザーが作成されるまでアクションをキャッシュするインデックス アクションを持つユーザー コントローラーがあります。コードは次のとおりです。

indexアクションにアクセスすると、ログに次のように表示されます。

が何なのかよくわかりませんし、毎回 ... が呼び出されてfilter chain halted ... did_not_yieldいることもわかりますが、これは私が期待したものではありません。select * from users

ここで何が起こっているのか、なぜこれが期待どおりに動作しないのかについて誰かが教えてくれますか? すなわち。そのアクションの出力全体がキャッシュされているはずなのに、なぜ User.all が実行されるのでしょうか?

0 投票する
2 に答える
3449 参照

ruby-on-rails - ユーザー固有のレコードの Rails アクション キャッシング

私は自分のアプリにキャッシュを実装しようとしているレール初心者です。memcached をインストールし、development.rb で次のように構成しました。

ログイン時にユーザー固有の製品を表示するコントローラー ProductsController があります。

問題は、私がとしてログインするときです

1) ユーザー A が初めて、レールがコントローラーにヒットし、製品アクションをキャッシュします。

2) ログアウトしてユーザー B としてログインすると、引き続きユーザー A としてログインし、ユーザー B ではなくユーザー A の製品が表示されます。コントローラーにもヒットしません。

キーはおそらくルートです。memcached コンソールでは、同じキーに基づいて取得していることがわかります。

アクションキャッシングは私が使用すべきものではありませんか? ユーザー固有の製品をキャッシュして表示するにはどうすればよいですか?

ご協力いただきありがとうございます。

0 投票する
1 に答える
545 参照

ruby-on-rails - Heroku アクションのキャッシュが機能していないようです

Heroku でさまざまなキャッシング戦略を試し、アプリにアクション キャッシングを追加する目的で memcached アドオンを追加しました。

ただし、現在のアプリで Rails.cache.stats を表示すると (memcached がインストールされていて、dalli gem を使用している場合)、キャッシュする必要があるアクションを実行した後、current と total_items が 0 になります。

キャッシュしたいアクションを含むコントローラーの上部に次のものがあります。

また、環境設定(Herokuで実行されているもの用)を次のように変更しました

それが機能しているかどうか、または何か間違ったことをしたかどうかを確認するために見ることができる他の統計はありますか?

0 投票する
2 に答える
4571 参照

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を使用しています。

0 投票する
1 に答える
3153 参照

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」で私が今持っているものは次のとおりです。

0 投票する
2 に答える
2658 参照

ruby-on-rails - caches_action, :expires_in => 動的に設定

caches_action私が見たすべての例は次のようになります。

expires_inアクションで使用されるオブジェクトの有効期限に基づいて設定したいと思います。問題のオブジェクトはアクションに送信されることにexpires_in基づいているため、設定時にそのオブジェクトを参照する方法はありますか?params

使ってみた

しかし、残念ながら、そこでパラメーターを参照することはできません。提案を歓迎します!

0 投票する
1 に答える
832 参照

ruby-on-rails - キャッシュスイーパーをコントローラーで宣言する必要があるのはなぜですか?

キャッシュスイーパーは、監視しているモデルにいくつかのフックがあるオブザーバーです。

しかし、ドキュメントとガイドには、コントローラーでスイーパーを宣言することも記載されています。

どうしてこれなの?モデルを観察して行動するという観察者のポイントではないでしょうか。コントローラーは、キャッシュがいつ期限切れになるか、または何が原因であるかを認識する必要はありませんか?

明確化

スイーパーをオブザーバーとして設定することについての私の理解は、「すべての場合において、MyModelが更新されたら、このクリーンアップコードを実行する」ことを意味するということです。

  1. それは正確ですか?
  2. もしそうなら、なぜcache_sweeper :my_sweeperコントローラーで宣言する必要があるのですか?それは何をしますか?
0 投票する
1 に答える
2895 参照

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 のものは呼び出されていないことです。

0 投票する
1 に答える
702 参照

ruby-on-rails-3 - rails3 キャッシング: caches_action(GET) によってキャッシュされたパラメータを持つ expire_action

何かを入力するときに ajax 呼び出しを行って結果を取得する検索機能に取り組んでいます。検索キーワードを使用して検索アクションを memory_cache にキャッシュしたいので、次のようにします。

私の質問は、パラメーターを使用してアクションを期限切れにするにはどうすればよいですか? 私の機能を動作させる別の方法はありますか?