2014-06-05 12 views
5

Sto seguendo la guida "Sviluppo Web agile con Rails 4" e sono giunto a una sezione sulla memorizzazione nella cache. Ecco i passi da seguire:Come capire se la memorizzazione nella cache funziona correttamente. Rails 4

  1. in config/ambienti/development.rb

    config.action_controller.perform_caching = true 
    
  2. in app/modelli/product.rb

    def self.latest 
        Product.order(:updated_at).last 
    end 
    
  3. nelle viste/negozio /index.html.erb

    <% 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 %> 
    

Per verificare che il denaro funzioni, il libro dice: "Per quanto riguarda la verifica che ciò funzioni, sfortunatamente non c'è molto da vedere. Se vai a quella pagina, non dovresti vedere nulla cambiare, che in effetti è il punto! Il meglio che puoi fare è apportare una modifica al modello ovunque all'interno del blocco cache senza aggiornare alcun prodotto e verificare che non si veda quell'aggiornamento perché la versione cache della pagina non è stata aggiornata. "

Tuttavia, quando provo ad aggiungere una stringa "Hello" nel codice all'interno dei blocchi della cache, appare nella pagina Ho riavviato tutto il server e cosa no

Ma quando ricarico la pagina sul mio locale ospito vedo questa linea

Cache digest for app/views/store/index.html.erb: 6c620ede1d4e824439a7b0e3b177620f 

che non è il loro quando ho config.action_controller.pe rform_caching = false

Link hub git repo: https://github.com/BrianLobdell/depot

Grazie, Brian

+0

e allora? tutto sembra funzionare ... – joni

+1

Il modo di testare nel libro diceva di aggiungere qualcosa nel blocco cache che non modificava un prodotto (come la stringa "ciao") e se la cache funzionava non si sarebbe mostrato la pagina. Tuttavia, nel mio caso, la stringa "Hello" è stata mostrata – megacanyon

risposta

2

Rails aggiorna la cache quando si cambia il file, così è più facile per manipolare la cache invece.

È possibile recuperare il frammento di cache utilizzando la cache digerire per la pagina nella console Rails (digest potrebbe avere cambiato, assicurarsi di utilizzare quello recente!):

key = ['store', Product.latest, '6c620ede1d4e824439a7b0e3b177620f'] 
ActionController::Base.new.read_fragment(key) 

Ciò dovrebbe restituire la cache frammento. Per garantire che Ruby in realtà colpisce la cache quando serve nella pagina, è possibile sostituire il frammento con alcuni altri contenuti: "funziona"

ActionController::Base.new.write_fragment(key, 'it works!') 

ricaricare la pagina, si dovrebbe vedere .

+0

Scusa se sono nuovo a questo quindi sono un po 'confuso su dove questo codice dovrebbe andare e cosa fa esattamente. – megacanyon

+0

Sono anche confuso sul motivo per cui il codice fornito nell'esempio dal libro non può essere testato nel modo in cui il libro descrive. – megacanyon

+1

Esegui il codice dalla [console Rails] (http://guides.rubyonrails.org/command_line.html#rails-console): digita 'rails console' nel tuo terminale per avviarlo. – Stefan

Problemi correlati