1


「Rails 4 を使用したアジャイル Web 開発」の本を読んでいますが、キャッシングに関する 105 ページで行き詰っています。
私は次のコードを持っていますindex.html.erb

<% if notice %>
  <p id="notice"><%= notice %></p>
<% end %>

<h1>Your Pragmatic Catalog</h1>

<% cache ['store', Product.latest] do %>
    <% @products.each do |product| %>
     <% cache ['entry', product] do %>
      <div class="entry">
        <%= image_tag(product.image_url) %>
        <h3><%= product.title %></h3>
        <%= sanitize(product.description) %>
        <div class="price_line">
            <span class="price"><%= number_to_currency(product.price) %></span>
        </div>
      </div>
    <% end %>
  <% end %>
<% end %>

最初の疑問は次のとおりです:
1)cache ['store', Product.latest]正確には何をしますか? すべての StoreController アクションから利用できる「store」という名前のキャッシュを作成し、そのキャッシュを Product.latest に関連付けます。キャッシュを Product.latest に関連付ける必要があるのはなぜですか?

常に同じページで、この本は次のように述べています。できることは、製品を更新せずにキャッシュ ブロック内の任意の場所でテンプレートを変更し、ページのキャッシュ バージョンが更新されていないためにその更新が表示されないことを確認することです。」


だから私はこのようなことを試しました:

<% cache ['store', Product.latest] do %>
  "hello"
  ........
  ........
<% end %>

しかし、私はまだこのアップデートを受け取ります。ページに「hello」という文字列が表示されます。なぜですか? 私はそれを見るべきではありませんか?

PS明らかに私は自分を編集config/environments/development.rbしてサーバーを再起動しました

4

2 に答える 2

0

アプリケーションを本番モードで起動すると、キャッシュが機能することがわかります。development.rb で何を編集しましたか? production.rb と比較し、すべてのキャッシュ構成プロパティをコピーして貼り付けてください。

于 2013-11-09T11:46:48.507 に答える
0

私は同じ「問題」を抱えていましたが、本が言っていることは正しくないと思います。私が知る限り、キャッシングがアクティブであるにも関わらず Web サイトに変更が表示される理由は、Rails 4 がキャッシュ ダイジェストを使用しているためです。詳細については、以下をご覧ください。

http://blog.remarkablelabs.com/2012/12/russian-doll-caching-cache-digests-rails-4-countdown-to-2013

に変更config.cache_classesしたときfalse、リクエストごとにビューを自動的に再生成しないように Rails に指示しただけです。変更が表示されなくなったのはそのためです。「キャッシュ」が正しく機能していたからではありません。

于 2015-01-16T23:25:43.647 に答える