2014-04-20 3 views
5

मैं अपने लोकहोस्ट पर उत्पादन वातावरण में अपने रेल 4 ऐप का परीक्षण कर रहा हूं: 3000 में निर्मित वेब्रिक सर्वर का उपयोग कर। जब मैं RAILS_ENV=production bundle exec rake assets:precompile चलाता हूं तो संपत्तियों को सार्वजनिक रूप से पुनर्निर्मित किया जाता है और मैनिफेस्ट का पुनर्निर्माण किया जाता है, लेकिन पृष्ठों को अभी भी पिछले संपत्ति नामों के साथ परोसा जाता है।प्रीकंपील्ड संपत्तियों को रीफ्रेश करने के लिए मैं रेल सर्वर कैसे प्राप्त करूं?

रेल सर्वर को पुनरारंभ करने से नई संपत्तियां दिखाई देती हैं। क्या यह हासिल करने के लिए एक कम चरम तरीका है और जब मैं इसे अपने उत्पादन सर्वर पर फ़्यूज़न पैसेंजर चलाता हूं तो यह कैसे व्यवहार करेगा। मैं वास्तव में गियर में अपनी संपत्ति प्राप्त करने के लिए अपाचे को पुनरारंभ नहीं करना चाहता हूं।

+0

क्या संकलित संपत्तियों के लिए फिंगरप्रिंटिंग सक्षम है? –

+0

हां, संकलित संपत्ति फिंगरप्रिंट हैं। विन्यास डिफ़ॉल्ट रेल 4 है, सिवाय इसके कि 'config.serve_static_assets = true' जिसे वीब्रिक'/public' से 'संपत्तियों की सेवा करने के लिए आवश्यक है,' config.assets.digest = true' सेट है। संपत्तियों में 'application-01d7312dee865ebe9d525b15f2fbe7f0.css' जैसे नाम हैं, यह वह मान है जो पृष्ठ शीर्षलेख में है। समस्या यह है कि पुराने संस्करण का निर्माण अभी भी एक नए के निर्माण के बाद किया जा रहा है। –

+0

पुराने संस्करण का मतलब है, क्या आपने सामग्री बदल दी है? यदि आपने संपत्तियों की सामग्री को नहीं बदला है, तो प्रीकंपिल्ड संस्करण पिछले जैसा ही होगा और यदि आप इसे थोड़ा सा भी बदलते हैं, तो फिंगरप्रिंट बदल जाएगा और ऐप केवल नए कॉन्फ़िगरेशन के रूप में अनुरोध करेगा। assets.digest = true'। –

उत्तर

3

यदि आपने संपत्ति की सामग्री को नहीं बदला है, तो प्रीकंपिल्ड संस्करण पिछले जैसा ही होगा। यदि आप इसे थोड़ा सा बदलते हैं, तो फिंगरप्रिंट बदल जाएगा और ऐप केवल नए के लिए अनुरोध करेगा जैसा कि आपने config.assets.digest = true सेट किया है।

वैसे भी चारों ओर एक और काम होगा:

बस चलाने:

rake assets:clean 

और फिर,

rake assets:precompile 

इस संपत्ति पाइप लाइन में सब कुछ करता है फिर से बनाया और हाल में की सेवा करने के लिए।

रेल अपनी सामग्री संपादित होने पर प्रत्येक व्यक्तिगत फ़ाइल के लिए स्वचालित रूप से कैश साफ़ करते हैं।

यदि उपरोक्त में से कोई भी काम नहीं किया, जैसा कि नीचे प्रयास करें:

config में

config.serve_static_assets = true/वातावरण/production.rb

config.serve_static_assets कॉन्फ़िगर रेल ही स्थिर संपत्ति की सेवा के लिए। डिफ़ॉल्ट पर डिफ़ॉल्ट, लेकिन उत्पादन वातावरण में बंद कर दिया गया है क्योंकि सर्वर सॉफ़्टवेयर (उदा। Nginx या Apache) अनुप्रयोग चलाने के लिए उपयोग किया जाता है, इसके बजाय स्थिर संपत्तियां प्रदान करनी चाहिए। डिफ़ॉल्ट सेटिंग के विपरीत इसे चलाने के दौरान इसे सही पर सेट करें (बिल्कुल अनुशंसित नहीं!) या WEBrick का उपयोग करके उत्पादन मोड में अपने ऐप का परीक्षण करें। अन्यथा आप पेज कैशिंग का उपयोग करने में सक्षम नहीं होंगे और नियमित रूप से सार्वजनिक निर्देशिका के अंतर्गत मौजूद फ़ाइलों के लिए अनुरोध आपके रेल ऐप को दबाएंगे।

रेफरी: http://guides.rubyonrails.org/configuring.html#rails-general-configuration

आशा है कि यह मदद करता है :)

+0

उत्तर के लिए धन्यवाद, लेकिन, ज़ाहिर है, मैंने सामग्री को संशोधित किया है, और मैंने दोनों रेक रेक: क्लीन 'और' रेक संपत्तियां: क्लोबबर 'और' serv_static_assets = true' दोनों की कोशिश की है। मैंने यहां पोस्ट करने से पहले लगभग हर गाइड को एक उत्तर की तलाश में पढ़ा है। मुझे लगता है कि यह वास्तव में कुछ प्रकार की कैशिंग समस्या हो सकती है। –

+0

@ पीटरवॉस्टर क्या आपने यह देखने के लिए मैन्युअल रूप से 'सार्वजनिक/संपत्ति' की सामग्री को हटाने का प्रयास किया है? – roshiro

+0

@roshiro सार्वजनिक/परिसंपत्तियों को हटाने से साइट को 1 99 6 की तरह दिखता है, कोई शैली नहीं जावास्क्रिप्ट। –

1

हम एक ही समस्या है, जहां पुराने संपत्ति रेक संपत्ति की कोशिश कर के बाद भी कार्य किया जा रहा था का सामना करना पड़ा: स्वच्छ या संपत्ति: पीटना और अंत में सर्वर रिबूट हल होगा मुद्दा। हमारे मामले में अपराधी यूनिकर्न था। मीना और मीना-यूनिकॉर्न का उपयोग करके हमारे रेल ऐप को तैनात करते समय, हमने रेक संपत्तियां चलाईं: क्लॉबर, फिर संकलित संपत्तियां और फिर अंत में यूनिकॉर्न को फिर से शुरू किया। ऐसा करके यूनिकॉर्न मास्टर कभी नहीं रुकता है और पुरानी संपत्तियां दिखाना जारी रखता है। इसलिए, हमने अपनी मीना तैनाती लिपि बदल दी और यूनिकॉर्न को पुनरारंभ करने की बजाय, हमने यूनिकॉर्न को रोक दिया और इसे वापस शुरू कर दिया। इस मुद्दे को हल किया।तो, प्रमुख चरणों

  1. तैनात आवेदन

  2. रन रेक संपत्ति कर रहे हैं: पीटना

  3. रन रेक संपत्ति: precompile

  4. रोक गेंडा

  5. गेंडा शुरू

यह शून्य डाउनटाइम की अवधारणा को मारता है लेकिन यह सर्वर को पुनरारंभ करने से बेहतर समाधान है।

मैं समझता हूं कि आप यात्री का उपयोग करते हैं लेकिन यह जानकारी दूसरों के लिए उपयोगी हो सकती है

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

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