Rails 3.2: ¿Pre-renderizar (hornear) una nueva caché de página inmediatamente después de su vencimiento?

Tengo una aplicación que usacaches_page para ciertos controladores / acciones. Para caducar el caché, uso una barredora. En general, es una solución estándar.

Sin embargo, debido a que algunos cambios pueden causar un poco de solicitudes en el servidor (debido a que se envían notificaciones push y pueden hacer que los dispositivos del cliente obtengan nuevos datos), me gustaría poder renderizar previamente el caché, así que está listo antes de que lleguen las solicitudes. Podría esperar a que la primera solicitud escriba automáticamente el caché, por supuesto, pero en este caso, yosabe que llegarán las solicitudes, que podría haber muchas y que podrían ser casi simultáneas. Entonces me gustaría tener el caché listo.

Para agregar algo de complejidad, las actualizaciones se realizan a través de una página web normal y se manejan en un controlador estándar, en su mayoría andamio, mientras que la "página" que quiero almacenar en caché es la respuesta JSON para un controlador completamente diferente que sirve como API.

Entonces, ¿cómo puedo, desde un barrendero (o desde el controlador que maneja la actualización de caducidad de caché) activar una nueva caché de página para que se escriba de inmediato?

Otra forma de expresarlo podría ser: ¿Cómo hago una solicitud interna de un controlador a otro?

Edit: Terminé haciendo algo como lo que ves a continuación. No es terriblemente elegante, pero es efectivo

class ModelSweeper < ActionController::Caching::Sweeper
  observe Model

  def after_create(model)
    expire_pages_for(model)
  end

  def after_update(model)
    expire_pages_for(model)
  end

  def after_destroy(model)
    expire_pages_for(model)
  end

  protected

    def expire_pages_for(model)
      # expire index page
      expire_and_bake(models_url)

      # expire show page
      expire_and_bake(model_url(model))
    end

    def expire_and_bake(url)
      # extract the path from the URL
      path = url.sub(%r{\Ahttp://[^/]+}, "")

      # expire the cache
      expire_page(path)

      # request the url (writes a new cache)
      system "curl '#{url}' &> /dev/null &"
    end

end

Respuestas a la pregunta(2)

Su respuesta a la pregunta