2015-11-27 13 views
10

के साथ सेवा दें, मैं एक रेल ऐप पर काम कर रहा हूं जिसमें बड़ी संख्या में संपत्तियां हैं, जो दुख की कमी नहीं हो सकती हैं। उत्पादन में यह कोई समस्या नहीं है, लेकिन विकास में, प्रति विज़िट पेज पर ~ 20 संपत्ति अनुरोधों को तुरंत एप्लिकेशन सर्वर (जैसे वेब्रिक या पतला) द्वारा सेवा नहीं दी जा सकती है।स्वचालित रूप से संपत्तियों को संकलित करें और उन्हें nginx (विकास)

इसलिए मैंने public/assets में कुछ भी सेवा देने के लिए विकास में nginx का उपयोग शुरू किया। ध्यान दें कि nginx पूरी तरह से विकास सुविधा है - हम इसे उत्पादन में उपयोग करने का इरादा नहीं रखते हैं। rake assets:precompile

दुर्भाग्य से वहाँ दो समस्याओं (उत्तरार्द्ध सबसे महत्वपूर्ण एक होने हैं

  • सेट config.assets.debug झूठी
  • चलाने के लिए:

    यह काम करने के लिए मैं सिर्फ दो काम करने के लिए किया था) मेरे सेटअप के साथ:

    • प्रत्येक संपत्ति परिवर्तन मैन्युअल रूप से आवश्यक है rake assets:precompile फिर से
    • ऐप सर्वर के लिए नई संकलित संपत्तियों को लेने के लिए, मुझे इसे पुनरारंभ करना होगा।

    सही nginx/संपत्ति पाइपलाइन सेटअप क्या है जिसके लिए रेल सर्वर सर्वर प्रीकंपिलेशन के बाद पुनरारंभ करने की आवश्यकता नहीं है?

    स्वचालित संकलन का भी स्वागत किया जाएगा।

+2

क्या आपने यूनिकॉर्न और प्यूमा जैसे अन्य रेल सर्वरों की कोशिश की है? फ़ाइल परिवर्तनों की निगरानी करने के लिए आप [गार्ड] (https://github.com/guard/guard) का उपयोग कर सकते हैं और 'रेक संपत्तियां: प्रीकंपाइल' चला सकते हैं और अपने सर्वर को पुनरारंभ कर सकते हैं। गार्ड के लिए – max

+0

+1। यूनिकॉर्न/प्यूमा विशिष्ट HTTP सर्वर नहीं हैं (विशेष रूप से यूनिकॉर्न जो डिजाइन द्वारा तेज़ क्लाइंट मानते हैं) इसलिए यदि संभव हो तो मैं संपत्ति के लिए nginx का उपयोग करना पसंद करूंगा। – vemv

+0

इस तरह की ध्वनि की तरह आपने संपत्ति पाइपलाइन को बढ़ा दिया है - रेल वास्तव में विकास में स्थिर संपत्तियों की सेवा के लिए नहीं बनाया गया है - यह तैनाती पर किया जाना चाहिए। तो सर्वर को पुनरारंभ करना बहुत मुश्किल हो जाएगा। तो आप उदाहरण के लिए अपनी संपत्ति को उबालने के लिए उदाहरण के लिए ग्रंट या ब्रोकोली का उपयोग कर देख सकते हैं। – max

उत्तर

3

इस सेटअप मेरे लिए काम किया:

  • रेल सर्वर शुरू करने से पहले config.asset_host
  • config.assets.debug = false
  • config.assets.digest = true
  • config.assets.compile = true
  • में nginx बंदरगाह, चलाने rm -rf public/assets; rake tmp:clear tmp:cache:clear assets:clean assets:precompile
  • लांच शामिल करें रेल सर्वर
  • प्रत्येक संपत्ति परिवर्तन पर, rake assets:precompile फिर से चलाएं। गार्ड इसका ख्याल रख सकता है।
1

इसके लिए बहुत सारे प्रयासों की आवश्यकता हो सकती है लेकिन परिसंपत्तियों को संकलित करने के लिए गलती या गड़बड़ी पर स्विच करने पर विचार करें। नोड जेएस का उपयोग की गति महत्वपूर्ण (इस पर बहुत से लेख हैं, यहां एक उदाहरण है http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/)। और सर्वर के पुनरारंभ किए बिना भी महत्वपूर्ण संपत्तियों को संकलित किया जा सकता है (फ़ाइल परिवर्तन [हुक] पर ट्रिगर की गई प्रक्रिया)। प्रोजेक्ट में मैं शामिल हूं कि हमारे लोग इस तरह के स्विच करने की कोशिश कर रहे हैं, और जो कहते हैं उससे मैं समझता हूं कि यह एक दिवसीय कार्य नहीं है।

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