2012-05-24 26 views
8

मैं इसे अपने जीवन के लिए नहीं समझ सकता। रैक :: कैश का उपयोग करने के लिए हेरोकू पर मेरे कुछ स्थिर सार्वजनिक पृष्ठों को कैश करने के लिए, कार्रवाई कैशिंग करने के अलावा, यदि यह रिवर्स प्रॉक्सी से पहले हो।हेरोोकू सीडर स्टैक - रैक कैश हेडर

उदाहरण के लिए, यहाँ मेरी "घर" कार्रवाई में कोड है:

class StaticPagesController < ApplicationController 
    layout 'public' 

    caches_action :about, :contact, ......, :home, ..... 

    ...... 

    def home 
    last_modified = File.mtime("#{Rails.root}/app/views/static_pages/home.html.haml") 
    fresh_when last_modified: last_modified , public: true, etag: last_modified 
    expires_in 10.seconds, :public => true  
    end 

सभी इरादों और मकसदों के लिए, यह 10 अधिकतम उम्र के साथ एक सार्वजनिक कैश-नियंत्रण टैग होना चाहिए नहीं?

$ curl -I http://myapp-staging.herokuapp.com/ 

HTTP/1.1 200 OK 
Cache-Control: max-age=0, private, must-revalidate 
Content-Type: text/html; charset=utf-8 
Date: Thu, 24 May 2012 06:50:45 GMT 
Etag: "997dacac05aa4c73f5a6861c9f5a9db0" 
Status: 200 OK 
Vary: Accept-Encoding 
X-Rack-Cache: stale, invalid 
X-Request-Id: 078d86423f234da1ac41b418825618c2 
X-Runtime: 0.005902 
X-Ua-Compatible: IE=Edge,chrome=1 
Connection: keep-alive 

क्या मैं कुछ गलत कर रहा हूं? मुझे लगता है कि उस स्टेल, अमान्य कैश प्रतिक्रिया के साथ कुछ है ... यह चौथा समय है जब मैंने पृष्ठ को मारा है।

कॉन्फ़िग जानकारी:

# Use a different cache store in production 
config.cache_store = :dalli_store 

config.action_dispatch.rack_cache = { 
    :verbose  => true, 
    :metastore => "memcached://#{ENV['MEMCACHE_SERVERS']}", 
    :entitystore => "memcached://#{ENV['MEMCACHE_SERVERS']}"#, 
} 

# OLD : Disable Rails's static asset server (Apache or nginx will already do this) 
config.serve_static_assets = true 
config.static_cache_control = "public, max-age=2592000" 

(? हो सकता है कि वहाँ एक रास्ता मैन्युअल रूप से कैश नियंत्रण हेडर स्थापित करने के लिए है लगता है जैसे वहाँ एक आसान तरीका है, हालांकि होना चाहिए)।

अद्यतन

मैं भी नियंत्रक कार्रवाई न्यूनतम करने के लिए नीचे ले कोशिश की है:

def home 
    expires_in 10.seconds, :public => true 
    #last_modified = File.mtime("#{Rails.root}/app/views/static_pages/home.html.haml") 
    #fresh_when last_modified: last_modified , public: true, etag: last_modified 
end 

और यह काम नहीं करता है ...

HTTP/1.1 200 OK 
Server: nginx 
Date: Thu, 24 May 2012 19:15:18 GMT 
Content-Type: text/html; charset=utf-8 
Connection: keep-alive 
Status: 200 OK 
X-Ua-Compatible: IE=Edge,chrome=1 
Etag: "733798214c652f39ae79b4037e9111dc" 
Cache-Control: max-age=0, private, must-revalidate 
X-Request-Id: b33087fe0c2ae986c4cac88f14420b7c 
X-Runtime: 0.006000 
X-Rack-Cache: stale, invalid 
Vary: Accept-Encoding 
X-Varnish: 349105873 
Age: 0 
Via: 1.1 varnish 

!

+0

क्या यह एक्शन कैशिंग के साथ भी संभव है? क्या आपने यह देखने के लिए पेज कैशिंग के साथ परीक्षण किया है कि हेडर अलग-अलग कैसे होते हैं? – KendallB

+0

हमम मैं तुम्हारा बिंदु देखता हूं। यदि रैक :: कैश पृष्ठों की सेवा के लिए ठीक से स्थापित किया गया है (सबसे साफ विधि नहीं, लेकिन आप हेरोकू पर सबसे अच्छा कर सकते हैं), तो मुझे वास्तव में कैशिंग कार्यों के लिए कुछ भी नहीं होना चाहिए। मुझे लगता है कि मेरे पास बस अच्छे उपाय के लिए था। मैं इसे लेने और क्या होता है यह देखने की कोशिश करूंगा। तुम्हारे पास वापिस आउंगी। – Brandon

+0

तो ऐसा लगता है कि आप सही हैं। जब मैंने एक्शन कैशिंग आउट किया, तो हेडर सही ढंग से सेट किए गए थे। मुझे नहीं पता कि मैं यद्यपि यह समझता हूं। HTTP प्रतिक्रिया शीर्षलेख को किसी क्रिया के परिणामों को कैशिंग करने से अलग नहीं होना चाहिए? हां, क्या मुझे अपने रेल ऐप (एक्शन कैश) की प्रतिक्रिया को कैश करने में सक्षम नहीं होना चाहिए, लेकिन फिर भी HTTP शीर्षलेख सेट करें जैसे कि यदि कोई उपयोगकर्ता किसी पृष्ठ को दोबारा अनुरोध करता है, तो वे सर्वर को बिल्कुल भी हिट नहीं करते हैं (सही सेटिंग्स प्रदान करते हैं अधिकतम आयु शीर्षलेख पर?) – Brandon

उत्तर

1

शायद पूरी चीज पर पुनर्विचार करें और केवल रेल कैशिंग का उपयोग करें। नई cache_digests मणि यह पटरियों के स्तर पर आप क्या चाहते करने के लिए तुच्छ बनाना चाहिए: https://github.com/rails/cache_digests

मुझे यकीन है के लिए इस विधि अपने उस फ़ाइल टाइमस्टैम्प हर 10 सेकंड की जाँच करने के एक फाइल सिस्टम कॉल कर भी शामिल है को हरा होगा तैयार हूँ।

संबंधित मुद्दे