Action caching


#1

Hola a todos,

he intentado sin éxito configurar “Action Caching”, he visto el
excelente
railscast de RyanBate, pero el tema es que yo tengo un escenario un poco
diferente y no sé muy bien como configurarlo, aca intentó explicar un
poco
el problema:

app/controllers/catalogs_controller.rb

. . .
caches_action :show
 . . .

app/controllers/admin/catalogs_controller.rb

 . . .
 cache_sweeper :catalog_sweeper, :only => [:create, :update, 

:destroy]
. . .

app/sweeper/ca

la primer vez que accedo al catálogo “A”, obtengo esto en el log, lo
cual
parece estar bien:
. . .
Cached fragment miss: views/localhost:3000/catalogs/glow-sticks
. . .

y si miró el filesystem se creó un archivo en
/public/views/localhost.3000/catalogs/A.cache

la segunda vez que quiero acceder al catálogo “A” obtengo lo siguiente
en el
log y también va todo bien, la página se refresca muy rapido y no hay
problema hasta aca:

Cached fragment hit: views/localhost:3000/catalogs/a (0.3ms)
Filter chain halted as
[#<ActionController::Caching::Actions::ActionCacheFilter:0xb5984bac
@options={:cache_path=>nil, :layout=>nil, :store_options=>{}}>]
rendered_or_redirected.
Filter chain halted as
[#<ActionController::Filters::AroundFilter:0xb5984814 @identifier=nil,
@method=#<ActionController::Caching::Actions::ActionCacheFilter:0xb5984bac
@options= {:cache_path=>nil, :layout=>nil, :store_options=>{}}>,
@kind=:filter, @options={:if=>nil, :only=>#<Set: {“show”}>,
:unless=>nil}>]
did_not_yield.
Completed in 62ms (View: 0, DB: 1) | 200 OK
[http://localhost/catalogs/a]

pero cuando voy a la vista para modificar el catálogo, cuando guardo
alguna
modificación veo en el log lo siguiente:

. . .
Expired fragment: views/localhost:3000/admin/catalogs/index/a (0.3ms)
. . .

si lo notan, está marcando como que la página que expiró esta ubicada en
views/localhost:3000/admin/catalogs/index/a lo cual no es cierto la
página
está en el mismo path pero sin admin, creo que el tema viene del scope
en
donde se ejecutan los métodos ya que en el video de Ryan B. el mismo
controlador es el que tiene los métodos para mostrar y actualizar.

Intenté ver que pasaba con el siguiente código pero nada paso :frowning:
cache_sweeper :catalog_sweeper, :only => [:create, :update, :destroy],
:cache_path => :index_cache_path.to_proc

def index_cache_path
‘/public/catalogs’
end

Tampoco funciono cuando escribí esto:

config/environment.rb

. . .
config.action_controller.page_cache_directory = RAILS_ROOT +
“/public/cache/”
config.cache_store = :file_store, “#{RAILS_ROOT}/public”
. . .

alguién sabe como se puede cambiar el lugar en donde se almacenan las
páginas cacheadas para que apunten al mismo lado? que pasará si pongo
esto
en producción, es decir, localhost.3000 en que se convertiría?

Saludos y espero que alguién pueda ayudarme.