Rails 3.2: pré-renderiza (assa) um novo cache de página imediatamente após o venciment

Tenho um aplicativo que usacaches_page para determinados controladores / ações. Para expirar o cache, eu uso uma vassoura. Em suma, é uma solução padrão.

No entanto, como algumas alterações podem causar um pouco de solicitações no servidor (porque as notificações push são enviadas e podem acionar os dispositivos clientes para buscar novos dados), eu gostaria de poder pré-renderizar o cache, então está pronto antes que as solicitações cheguem. Eu poderia esperar pela primeira solicitação para gravar automaticamente o cache, é claro, mas nesse caso, euconhece que os pedidos chegarão, que poderão existir muitos e que eles poderão ser quase simultâneos. Então, eu gostaria de ter o cache pronto.

Para adicionar um pouco de complexidade, as atualizações são feitas através de uma página da Web normal e manipuladas em um controlador padrão, geralmente com andaimes, enquanto a "página" que eu quero armazenar em cache é a resposta JSON para um controlador totalmente diferente que serve como API.

ntão, como eu, de uma vassoura (ou do controlador que está lidando com a atualização que expira no cache) aciono um novo cache de página para ser gravado imediatament

Outra maneira de colocar isso pode ser: Como faço uma solicitação interna de um controlador para outr

Edit: Acabou fazendo algo parecido com o que você vê abaixo. Não é muito elegante, mas é eficaz

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

questionAnswers(2)

yourAnswerToTheQuestion