2013-10-11 85 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 

有沒有一種方法,我可以緩存產品在清漆,並設置一個TTL爲滿座的產品。一些研究表明ESI可能是一個好主意。但是,我找不到詳細的文檔,我可以按照這個文檔來實現這一點。另外,如何訪問清漆中sold_out_status的輸出?

編輯:在一個頁面上的售罄產品可以通過下面的請求URL找到,對應於這個URL的頁面包含作爲文本呈現的售罄產品的ID。

回答

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); 
}