के साथ स्टेटिक फ़ाइल वर्जनिंग मैं अपने सीएसएस/जावास्क्रिप्ट के लिए दूर-भविष्य की हेडर्स की अवधि समाप्त कर रहा हूं ताकि ब्राउज़र कैश किए जाने के बाद कभी भी फाइलों के लिए कभी भी पूछ न सके। मेरे पास एक साधारण वर्जनिंग तंत्र भी है ताकि अगर फाइलें बदल जाएंगी, तो ग्राहक जान जाएंगे।Django
मूल रूप से मैं एक टेम्पलेट टैग है और मैं की तरह
<script type="text/javascript" src="{{ MEDIA_URL }}{% versioned "javascript/c/c.js" %}"></script>
जो कुछ
<script type="text/javascript" src="http://x.com/media/javascript/c/c.min.js?123456"></script>
हो जाएगा है।
टेम्पलेट टैग एक फ़ाइल javascript/c/c.js.v
खोलता है जहां इसे संस्करण संख्या मिलती है और इसे क्वेरी स्ट्रिंग में जोड़ती है। संस्करण एक शेल स्क्रिप्ट द्वारा उत्पन्न होता है (मैन्युअल रूप से अब के लिए चलाएं, शायद पूर्व-प्रतिबद्ध हुक जोड़ देगा) जो जांचता है कि फ़ाइल बदल गई है (git diff
का उपयोग करके)।
यह वह जगह है सब ठीक काम कर रहा है, सिवाय:
मैं छवियों के लिए संस्करण का एक ही प्रकार के रूप में अच्छी तरह से लागू करना चाहते हैं। लेकिन छवियों को सीएसएस से संदर्भित किया जा सकता है - जो एक स्थिर फ़ाइल है (nginx द्वारा परोसा जाता है) - इसलिए वहां कोई टेम्पलेट टैग नहीं है।
फ़ाइल संस्करण के लिए बेहतर तरीका क्या है?
वैकल्पिक रूप से, मैं टेम्पलेट टैग को एक मिडलवेयर के साथ बदलने के बारे में सोच रहा हूं जो प्रतिक्रिया वापस करने से पहले सभी लिंक बदलता है। यह टेम्पलेट टैग से बेहतर है, जिसे गलती से छोड़ा जा सकता है। लेकिन अभी भी सीएसएस से संदर्भित छवियों के मुद्दे को हल नहीं करता है।
इसके अलावा, मुझे पता है कि क्वेरी स्ट्रिंग के हिस्से के रूप में संस्करण होने से फ़ाइल को कैशिंग नहीं करने वाले कुछ प्रॉक्सी के साथ समस्या हो सकती है - इसलिए मैं फ़ाइल नाम का संस्करण भाग बनाने पर विचार करता हूं - उदाहरण के लिए javascript/c/c.123456.js
।
नोट: ऐसा लगता है कि Django का उपयोग करके इस समस्या को हल करने का कोई तरीका नहीं है (जाहिर है - क्योंकि मैं Django के माध्यम से सीएसएस की सेवा भी नहीं करता)। लेकिन वहां एक समाधान होना चाहिए, शायद कुछ nginx चाल शामिल है।
नीचे @paluh द्वारा उत्तर आपकी सबसे अच्छी शर्त है। Django में फ़ाइल से फ़ाइल mtimes खींचना Django में फ़ाइलों पर सीधे mtimes की जांच करने पर आपको कुछ भी बचा नहीं रहा है। यह केवल जटिलता की एक अतिरिक्त परत और विफलता का एक और बिंदु जोड़ रहा है (शेल स्क्रिप्ट क्रॉन नौकरी के रूप में चल रहा है)। –
वास्तव में, mtimes मेरा सेटअप आसान बना सकता है - स्क्रिप्ट चलाने और गिट पर निर्भरता को चलाने की आवश्यकता को कम करता है। मैं आमतौर पर mtimes पर भरोसा नहीं करता (वे किसी अन्य फाइल सिस्टम की प्रतिलिपि बनाते समय बदल सकते हैं, या बैक अप ले सकते हैं, या ...) - लेकिन इस मामले में मुझे लगता है कि यह वास्तव में कोई फर्क नहीं पड़ता, क्योंकि स्रोत पेड़ हमेशा एक ही स्थान पर होता है । इसके अलावा, अगर माइटिम्स वास्तव में कुछ कारणों से बदलते हैं, तो सबसे बुरा होता है कैश अवैध हो जाते हैं। भयानक नहीं – ibz
सीएसएस फ़ाइलों को संसाधित करने के लिए पूर्व-तैनाती चरण के बारे में कैसे? मैंने कुछ ऐसा किया लेकिन Django के साथ नहीं। यह कुछ कस्टम PHP था। –