2013-08-23 9 views
7

मेरे उत्पादन तैनाती में कुछ अतिरिक्त मिनट लगते हैं क्योंकि यह नोकोगिरी मणि (1.6.0) स्थापित करने के लिए होता है। मैं समझता हूं क्योंकि यह मणि स्थापित करने से मूल विस्तार संकलन होता है।बाद के बंडल पर देशी एक्सटेंशन पुनर्मूल्यांकन छोड़ना

ध्यान दें कि मैं DVCS

bundle package 

में मेरी बंडल पैक और यह जाँच की है वहाँ एक रास्ता देशी एक्सटेंशन अगर और कुछ नहीं बदला है की रखता से बचने के लिए है, ताकि तैनाती तेजी से कर रहे हैं? एक उबंटू 12.04LTS 64 बिट रूबी 193-p448

+0

के लिए काम किया एक 'बंडल install' आमतौर पर जवाहरात उस बंडलर इन आवश्यकताओं से मेल खाते मिलते छोड़ देता है। तैनाती के लिए आप क्या उपयोग कर रहे हैं? –

+0

@NeilSlater मैं तैनात करने के लिए महाराज का उपयोग करता हूं। – Litmus

+0

मेरे पास सभी मूल एक्सटेंशन का उत्तर नहीं है, लेकिन क्या आपने 'NOKOGIRI_USE_SYSTEM_LIBRARIES = true' जोड़ने का प्रयास किया है? – zrl3dx

उत्तर

4

मैंने पाया:

अद्यतन:

मैं Opscode बावर्ची तैनात करने के लिए (बावर्ची-एकल विशिष्ट होना)

वातावरण है का उपयोग ऐसा करने का तरीका। यहां स्पष्टीकरण दिया गया है:

बंडलर, डिफ़ॉल्ट रूप से पर्यावरण चर BUNDLE_PATH द्वारा इंगित फ़ोल्डर में रत्न स्थापित करता है। BUNDLE_PATH का डिफ़ॉल्ट मान vendor/bundle है। इसलिए सभी रत्न /vendor/bundle फ़ोल्डर में स्थापित हैं, जो एक निजी फ़ोल्डर (रेल अनुप्रयोग के प्रत्येक संस्करण के लिए) होता है। जब रेल अनुप्रयोग का एक नया संस्करण स्थापित होता है, vendor/bundle मौजूद नहीं है। इसलिए बंडलर प्रत्येक मणि को स्थापित/प्रीकंपाइल करता है। यह vendor/cache से रत्न उठाता है जो rubygems.org से इसे डाउनलोड करने पर एक अच्छी बचत है, लेकिन यह अभी भी देशी एक्सटेंशन के संकलन से बच नहीं सकता है।

हम --path /shared/pathbundle install कमांड लाइन पर जाकर इसे ओवरराइड कर सकते हैं। यह सुनिश्चित करेगा कि रत्न हमेशा /shared/path में स्थापित होते हैं, जो सभी संस्करणों (रेल एप्लिकेशन के) के लिए सुलभ है।

इस दृष्टिकोण के साथ, बंडलर एक मणि को पुनः स्थापित/पुन: संकलित करने का प्रयास नहीं करेगा, क्योंकि यह पहले से ही इंस्टॉल हो गया है।

हां, तो यह जादू आदेश है कि मुझे

bundle install --local --deployment --path /shared/bundle --without development test 
+0

सावधान रहें कि एक दिन, आपके पास अतीत में फंस गया ऐप हो सकता है जो हालिया मणि का उपयोग नहीं कर सकता है। जब ऐसा होता है, तो आप शायद अपने रत्नों को बेचने के लिए खेद नहीं कर सकते हैं। –

+1

सच नहीं है। उत्पादन में, मैं चाहता हूं कि ऐप केवल उन रत्नों का उपयोग करे जो 'Gemfile.lock' से बंद हैं। जेम उन्नयन विकास में होते हैं ('बंडल पुराना 'और' बंडल अपडेट' का उपयोग करके)। चूंकि मैं 'बंडल पैकेज' का उपयोग करता हूं, इसलिए उन अपग्रेड किए गए रत्न 'विक्रेता/कैश' में संग्रहीत होते हैं।और उत्पादन में जब मैं 'बंडल इंस्टॉल - डिप्लॉयमेंट' चलाता हूं तो नए रत्न 'विक्रेता/कैश' से उठाए जाते हैं और ऊपर बताए गए अनुसार '--पथ' विकल्प द्वारा निर्दिष्ट पथ में स्थापित होते हैं। – Litmus

+0

यह इतना उपयोगी और पूरी तरह से सुरक्षित है कि मुझे आश्चर्य है कि '--deployment' का उपयोग करते समय यह डिफ़ॉल्ट व्यवहार क्यों नहीं है! नोकोगिरी हर नियोक्ता का सबसे बुरा सपना है। –

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