Как кэшировать динамический контент в лаке?

Я работаю над приложением RoR. Я хочу установить ttl для проданных товаров. Функция sold_out_status возвращает productId проданных продуктов и определяется как:

def sold_out_status
 query_str = params[:pids]
 pids = query_str.split(",")
 sold_outs = cache(request.fullpath.to_s, :expires_in => 3600.seconds.to_i) do 
  pids.select {|x| (Product.find(x).on_hand <= 0)}.join(",")
 end

render :text => sold_outs
end

Есть ли способ кэшировать продукты в лаке и установить ttl для распроданных продуктов. Некоторые исследования показали, что ESI может быть хорошей идеей. Но я не смог найти подробную документацию, которой я мог бы следовать, чтобы реализовать это. Кроме того, как я могу получить доступ к выводу sold_out_status в лаке?

EDIT: Распроданные продукты на странице можно найти, перейдя по URL-адресу запроса. Страница, соответствующая этому URL-адресу, содержит идентификаторы распроданных продуктов, представленные в виде текста.


person nish    schedule 11.10.2013    source источник


Ответы (1)


Добавьте следующее в vcl_fetch:

sub vcl_fetch{
  if (req.url ~ "^/taxons/sold_out_status.") {
    std.syslog(180, "setting TTL for sold out products");
    set beresp.do_esi = true;
    set beresp.ttl = 1s;
    return(deliver);
}
person nish    schedule 24.10.2013