2013-01-17 17 views
10

पर तैनाती की गति तेज है। लेकिन हर बार जब मैं तैनात करता हूं, तो हेरोोकू सभी पैकेजों को फिर से लोड और पुनर्निर्माण करना पसंद करता है। socket.io और mailparser के साथ इसमें लगभग 3 मिनट लगते हैं।हेरोकू

तैनाती प्रक्रिया को तेज करने का कोई तरीका है? क्या हेरोोकू को यह बताने का कोई तरीका है कि यह इन वस्तुओं को कैश कर सकता है? या मैं प्रीबिल्ट node_modules अपलोड कर सकता हूं?

+0

[बिल्ड-पैक] (https: // github।com/heroku/heroku-buildpack-nodejs) (जो कोड है जो आपके स्रोत कोड को हेरोकू पर तैनात किया जाता है) में बदलता है, पहले से ही निर्माण के बीच 'node_modules' को कैशिंग कर रहा है। कम से कम यह रीडमे में ऐसा कहता है। क्या आप वाकई अपने निर्माण को धीमा कर रहे हैं? – friism

+2

@ मित्रता मुझे लगता है कि वे मानक एनपीएम कैशिंग का उपयोग करते हैं, इसलिए मॉड्यूल को अभी भी अनपॅक किया जाना है, कॉपी किया गया है और, सबसे महत्वपूर्ण बात यह है कि प्रत्येक धक्का के बाद पुनः संकलित किया जाता है। यदि आपके पास एक विशिष्ट निर्भरता पेड़ के साथ मॉड्यूल हैं या सी ++ एक्सटेंशन (mongodb, socket.io, आदि) के आधार पर इसमें कुछ समय लगता है। –

उत्तर

8

ऐसा लगता है जैसा कि आज के रूप में Heroku अंत में node_modules फ़ोल्डर कैशिंग है!

-----> 6 फाइलों को मिलान करना .slugignore पैटर्न।

-----> Node.js ऐप का पता चलता

-----> अनुरोधित नोड रेंज: 0.10.x

-----> हल नोड संस्करण: 0.10.22

-----> डाउनलोड और इंस्टॉल नोड

----->

-----> कैश से node_modules पुनर्स्थापित कर रहा है dependen स्थापित कर रहा है cies

-----> छंटाई अप्रयुक्त निर्भरता

-----> कैशिंग भविष्य के लिए निर्देशिका

-----> बनाता नोड ढकोसला और NPM कलाकृतियों साफ़ node_modules

बिल्ड समय अब ​​मेरे लिए 3 सेकंड की तरह है।

+0

yup मुझे आज भी वही अनुभव था। क्या यह हमेशा उन्हें कैश करेगा या यह स्वचालित रूप से अपडेट होने पर यह पता चलेगा? – Alexis

+1

मेरे पास कोई स्रोत नहीं है, लेकिन मुझे इसकी कल्पना है: यदि वे बस 'node_modules' फ़ोल्डर को प्रोजेक्ट में कॉपी करते हैं और' npm अपडेट 'चलाते हैं, तो यह केवल उन हिस्सों को अपडेट करेगा जिन्हें अपडेट की आवश्यकता है। तो मूल रूप से एनपीएम पहले से ही इस अच्छी तरह से संभालती है। यह एनपीएम की सुंदरता है, यह पूरे निर्भरता पेड़ को फाइल सिस्टम में मैप करता है। – Prinzhorn

+0

एक सप्ताह के बाद मैं पुष्टि कर सकता हूं कि हर बार जब मैं मॉड्यूल निर्भरता अद्यतन करता हूं और उसके आकुको को धक्का देता हूं कि केवल यह एक मॉड्यूल एनपीएम रजिस्ट्री से प्राप्त किया जाता है। पहले से बहुत तेज है। – Prinzhorn

1

एक चीज जो मैंने प्रक्रिया को तेज करने के लिए किया था, मुख्य फ़ोल्डर में .slugignore फ़ाइल को जोड़ना था और उन सभी फ़ाइलों और फ़ोल्डरों को जोड़ना था जिन्हें मैं ऐप चलाने के लिए नहीं चाहता था। .slugignore फ़ाइल के

नमूना सामग्री:
काम कर
मॉक-अप
* .psd
* .pdf

1

मैं एक ही सवाल था (Avoid npm refresh after every deployment on Heroku देखें)।

हेरोकू एक डाउनलोड/बिल्ड/आदि को मजबूर करता है। अनुक्रम क्योंकि उन्हें 'रिक्त स्लेट' के साथ एक ऐप शुरू करने की आवश्यकता है: पिछली अवांछित फ़ाइलों को साफ़ करने के लिए, जब वे आपके ऐप को दूसरे सर्वर पर ले जाते हैं, तो जब आप नए वेब डायनोस को आवंटित करते हैं, तो

समस्या मूल पैकेज के साथ स्पष्ट रूप से है , और पुनर्मूल्यांकन। सभी जेएस-केवल पैकेजों के लिए, मैं उन्हें अपने प्रोजेक्ट के साथ प्रतिबद्ध करता हूं, और उन्हें package.json से हटा देता हूं। यह कुछ सेकंड प्राप्त करता है, लेकिन इतना नहीं।

मैं निश्चित रूप से पूर्व संकलन और देशी मॉड्यूल के लिए प्रतिबद्ध, (मैं सफलतापूर्वक wkhtml2pdf Heroku पर, चलाने के एक द्विआधारी linux-amd64 के लिए संकलित साथ उदाहरण के लिए) यदि आप एक लिनक्स बॉक्स तक पहुंचने के लिए संभव हो जाना चाहिए (या वी एम) उसी कॉन्फ़िगरेशन के साथ - आज के रूप में, Linux [...] 2.6.32-350-ec2 #57-Ubuntu SMP [...] x86_64 GNU/Linux

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

1

मैं एक ही समस्या में भाग रहा हूं।

यहाँ node_modules फ़ोल्डर कैशिंग के बारे में कुछ चर्चा: https://github.com/heroku/heroku-buildpack-nodejs/pull/37

एक और विचार: https://github.com/heroku/heroku-buildpack-nodejs/issues/25


मैं कुछ समाधान के बारे में अभी सोच रहा हूँ। एक अलग शाखा में node_modules में

  1. की जांच: कोर Node.js देखरेख वास्तव में स्रोत नियंत्रण में node_modules फ़ोल्डर में जाँच (क्षुधा, नहीं libs के लिए) की सलाह देते हैं। मुझे यह पसंद नहीं है। इसके आस-पास जाने का एक तरीका अलग-अलग production शाखा अलग-अलग .gitignore फ़ाइल के साथ हो सकता है जो node_modules को अनदेखा नहीं करता है। जब आप तैनाती करना चाहते हैं, तो बस अपने मास्टर से एक रिबेस करें और node_modules चेक इन किया जाएगा। कम से कम यह आपकी मास्टर शाखा निर्भरताओं से मुक्त रखता है।

  2. संकुचित निर्भरता ज़िप डाउनलोड करने के लिए package.json करने के लिए एक preinstall स्क्रिप्ट जोड़ें: आप अपने निर्भरता को बंडल और उन्हें S3 पर अपलोड करने के एक पूर्व धक्का Git हुक जोड़ सकते हैं। हालांकि यह शायद बहुत धीमा होगा।

  3. संशोधित heroku-buildpack-nodejs: node_modules कैशिंग के साथ बकाया पुल अनुरोध एकीकृत:

    heroku config:set BUILDPACK_URL=https://github.com/opdemand/buildpack-nodejs.git

1

लगता है जैसे वहाँ हाल ही में किया गया है heroku-buildpack-nodejs पर प्रगति।

एक बार पुल अनुरोध विलय कर दिया है, तो आप अपने heroku environment variables को

heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs

जोड़ सकते हैं।

अभी के लिए, डेविड डॉलर की काँटेदार भंडार

https://github.com/ddollar/heroku-buildpack-nodejs

इस के साथ अपने BUILDPACK_URL यह कैश चाहिए NPM मॉड्यूल के रूप

पर उपलब्ध है। मैंने इसे node.js 0.10.5a, एनपीएम संस्करण: 1.3.5 और npm_modules के साथ .gitignore में आजमाया। टीटी अब तक ठीक काम करता प्रतीत होता है!

1

चेक आउट नई Heroku Node.js buildpack की इस शाखा, जो अब बीटा में है, जो बीच node_modules कैशिंग का समर्थन करता है बनाता है:

https://github.com/heroku/heroku-buildpack-nodejs/tree/diet

इसका इस्तेमाल करने के लिए:

heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs#diet -a my-node-app 
git commit -am "fakeout" --allow-empty 
git push heroku