2013-10-11 3 views
3

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

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 

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

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

ответ

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); 
} 
Смежные вопросы