Teníamos la necesidad de hacer algo similar de una tarea de rake: teníamos un parcial que debería mostrar una lista muy larga de entidades (~ 700) que eran un tanto específicas del contexto y que, debido a una serie de los problemas de la estructura de la base de datos y los criterios de clasificación personalizados tardarían fácilmente más de 25 segundos en renderizar por primera vez antes de entrar en la memoria caché> Esto a menudo expira porque nuestros servidores HTTP se configuraron para terminar solicitudes HTTP sin respuesta después de 30 segundos y precaching esta lista personalizada fue una solución.
Lo que necesita hacer es crear una instancia de ActiveController :: Base, o de uno de sus controladores si necesita métodos auxiliares u otras entidades, luego pase su referencia de lookup_context a una nueva instancia de ActionView.Renderer.
En nuestra tarea rastrillo, que hizo lo siguiente
namespace :rake_for_time_consuming_nonsense do
task :pre_cache_long_list do
PreCacher.pre_fetch_partials
end
end
class PreCacher
def self.pre_fetch_partials
the_controller = ActionController::Base.new
# Set any instance variables required by your partial in the controller,
# they will be passed to the partial with the view_context reference
the_controller.instance_variable_set "@cache_key", cache_key
the_controller.instance_variable_set "@the_object", MyModel.first
view_renderer = ActionView::Renderer.new the_controller.lookup_context
view_renderer.render the_controller.view_context, {partial: 'my_model/the_partial', layout: false}
end
end
Esto funciona en Rails 3.2.13.
Gracias @metaphalon .. lo probaré e informaré. – bgajdero
Esto no funcionó, o al menos no puedo obtenerlo para generar la vista. ais.response devolvió el código generado, pero nto los parciales, y no el caché. ¿Hay alguna forma de procesar la respuesta con HAML desde la consola? – bgajdero
Esto solo generó el caché, no sé qué backend de caché usa. Tendrá que utilizar el servidor de FileStore, porque MemoryStore vivirá en la memoria y cuando cierre el rake (o la consola) se perderán todos los parciales en caché. – metaphalon