Railsキャッシュの手法
読み込みがあまりにも遅いページがあったので、初めてキャッシュを導入しようとした時のめもです。
キャッシュの手法は 3つあり、
1, ページキャッシュ (ページごとのキャッシュ)
2, アクションキャッシュ (アクションごとのキャッシュ)
3, フラグメントキャッシュ (部品(header, each文等)ごとのキャッシュ)
これだけ覚えておけばよさそう。
今回はindexアクションが遅いということで、
はじめに2のアクションキャッシュを使用してみました。
gem 'actionpack-action_caching'
bundle install
※development環境でもキャッシュを有効にするためにdevelopment.rbの以下をtrueに変更
config.action_controller.perform_caching = true
遅いと原因となっているcontrollerに caches_action :index を追記した。
class SampeController < ApplicationController caches_action :index def index end end
これでページをリロードしてみた。
...
1回目はキャッシュがまだないので当然遅かったが、2回目にかなり早くなって成功!!簡単じゃん。
と自惚れていたら。。。
データを更新してもキャッシュが読み込まれてしまって、変更が反映されていませんでした。。
アクションキャッシュでページの更新を検知し、変更があればキャッシュを書き換える方法もあるとどこかで見ましたが、なんかめんどそうなので、今回は不採用に。
そこでもっと簡単な方法はないかと検索していると、上記3の方法がよしなに変更を検知してくれるらしいとの情報を見つけたので、試してみました(しかもgemが不必要)。
renderに cached: trueを追記
= render partial: "samples/sample", collection: @pending_relations.includes(:influencer, :campaign), cached: true
render先のviewを cache do で囲う
- cache sample do
すると、2回目の表示速度が早くなり、データ更新するとしっかりと反映されるようになりました!
bundle installするとAn error occurred while installing rjbのエラー。
$ bundle install --path vendor/bundler
したら
An error occurred while installing rjb (1.5.5), and Bundler cannot continue. Make sure that `gem install rjb -v '1.5.5'` succeeds before bundling.
のエラーが出てしまいました。
エラー文の通り以下を実行すると。。
$ gem install rjb -v '1.5.5'
次はこのエラーが出ました。
ERROR: Error installing rjb: ERROR: Failed to build gem native extension. ... Unable to find any JVMs matching version "(null)". No Java runtime present, try --request to install. *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
このエラー文をそのままググると
Unable to find any JVMs matching version "(null)". No Java runtime present, try --request to install.
qiita.com
こんな記事を発見。
記事に記事の通りJDKをインストールし、再度bundle install
$ bundle install --path vendor/bundler
見事に成功しました。
ホワイトデーのお返し。
こんにちは〜。
昨日はホワイトデーでしたが、何か返さないとなーって1週間前くらいから考えていました。
普通にちょっといいチョコとかをお返しすればいいんでしょうが、無駄に普通じゃないものを返したくなってネットサーフィンしてたらこんなサイトを見つけました。
「モノではなく体験を送ろう」っていうフレーズにまんまと惹かれ、
カフェチケット TOKYO
を即購入しました。
これをあげれば、「一緒に行こうよ!」って言ってくれるんじゃないかっていう下心丸出しの商品です。
まだ渡していないので、喜ぶかどうか結構怪しいですが、個人的にいい買い物したと満足してしまっています。