मैं इसे अपने जीवन के लिए नहीं समझ सकता। रैक :: कैश का उपयोग करने के लिए हेरोकू पर मेरे कुछ स्थिर सार्वजनिक पृष्ठों को कैश करने के लिए, कार्रवाई कैशिंग करने के अलावा, यदि यह रिवर्स प्रॉक्सी से पहले हो।हेरोोकू सीडर स्टैक - रैक कैश हेडर
उदाहरण के लिए, यहाँ मेरी "घर" कार्रवाई में कोड है:
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
!
क्या यह एक्शन कैशिंग के साथ भी संभव है? क्या आपने यह देखने के लिए पेज कैशिंग के साथ परीक्षण किया है कि हेडर अलग-अलग कैसे होते हैं? – KendallB
हमम मैं तुम्हारा बिंदु देखता हूं। यदि रैक :: कैश पृष्ठों की सेवा के लिए ठीक से स्थापित किया गया है (सबसे साफ विधि नहीं, लेकिन आप हेरोकू पर सबसे अच्छा कर सकते हैं), तो मुझे वास्तव में कैशिंग कार्यों के लिए कुछ भी नहीं होना चाहिए। मुझे लगता है कि मेरे पास बस अच्छे उपाय के लिए था। मैं इसे लेने और क्या होता है यह देखने की कोशिश करूंगा। तुम्हारे पास वापिस आउंगी। – Brandon
तो ऐसा लगता है कि आप सही हैं। जब मैंने एक्शन कैशिंग आउट किया, तो हेडर सही ढंग से सेट किए गए थे। मुझे नहीं पता कि मैं यद्यपि यह समझता हूं। HTTP प्रतिक्रिया शीर्षलेख को किसी क्रिया के परिणामों को कैशिंग करने से अलग नहीं होना चाहिए? हां, क्या मुझे अपने रेल ऐप (एक्शन कैश) की प्रतिक्रिया को कैश करने में सक्षम नहीं होना चाहिए, लेकिन फिर भी HTTP शीर्षलेख सेट करें जैसे कि यदि कोई उपयोगकर्ता किसी पृष्ठ को दोबारा अनुरोध करता है, तो वे सर्वर को बिल्कुल भी हिट नहीं करते हैं (सही सेटिंग्स प्रदान करते हैं अधिकतम आयु शीर्षलेख पर?) – Brandon