2013-12-12 5 views
16

मैं एडब्ल्यूएस बीनस्टॉक परिनियोजन के समग्र वर्कफ़्लो के बारे में उत्सुक हूं। मुझे लगता है कि सर्वर पर संकुल स्थापित करने के लिए यह किसी बिंदु पर एनपीएम चलाता है। लेकिन मैं बस सोच रहा था कि क्या एडब्ल्यूएस बीनस्टॉक पैकेज स्थापित करने के लिए 'npm install --production' के नवीनतम कमांड का उपयोग करता है। वर्तमान में मेरे पास एक पैकेज.जेसन फ़ाइल है जैसा कि नीचे दिखाया गया है और यदि संभव हो तो बीमा करना चाहूंगा कि केवल निर्भरताएं स्थापित की जा रही हैं, न कि देवताओं पर निर्भर करता है।एक नोडज ऐप को तैनात करते समय एडब्ल्यूएस बीनस्टॉक एनपीएम का उपयोग कैसे करता है?

"dependencies": { 
    "express": "3.4.4", 
    "jade": "*", 
    "restify": "~2.6.0", 
    "assert": "~1.0.0", 
    "orchestrate": "0.0.2", 
    "chance": "~0.5.3" 
}, 
"devDependencies": { 
    "mocha": "~1.15.1" 
} 

उत्तर

5

वर्तमान में लचीला बीनस्टॉक पर्यावरण --production झंडा बिना npm install चलाता है। डेवलपर (यानी, पर्यावरण विकल्प सेटिंग्स) द्वारा प्रदान किए गए किसी भी एनवी अनुकूलन से पहले /opt/elasticbeanstalk/containerfiles/ebnode.py पर यह उदाहरण होता है, जिसका मतलब है कि ईबी पर्यावरण की कॉन्फ़िगरेशन में NODE_ENV=production सेटिंग भी देवताओं पर संसाधित होने से रोकती नहीं है।

+0

उत्तर के लिए धन्यवाद। निश्चित रूप से अच्छा अगर यह एक सुविधा के रूप में जोड़ा गया था। मुझे यह भी एहसास है कि नोड.जेएस टीम की तरह हम सभी पर फंस गए हैं। ;) – Adron

+9

यह सही उत्तर नहीं है (कम से कम, आज)।'Npm install' को प्रभावित करने का तरीका परिवर्तनीय' NPM_CONFIG_PRODUCTION' के माध्यम से है और 'NODE_ENV' नहीं है। लोचदार बीनस्टॉक इसका समर्थन करता है, जैसा कि मैंने नीचे अपने उत्तर में उल्लेख किया है। – rgareth

21

यदि आप पर्यावरण परिवर्तनीय NPM_CONFIG_PRODUCTION=true सेट करते हैं तो आप उत्पादन मोड में npm install चलाने के लिए AWS लोचदार बीनस्टॉक प्राप्त कर सकते हैं। आप इसे लोचदार बीनस्टॉक वेब कंसोल के माध्यम से कर सकते हैं।

वैकल्पिक रूप से, एक निर्देशिका परियोजना जड़ में .ebextensions बुलाया अंदर प्रत्यय .config के साथ किसी भी फ़ाइल में निम्न पाठ बचाने के लिए और आप उन्हें वेब कंसोल में हर बार सेट किए बिना एक ही बात को प्राप्त कर सकते:

option_settings: 

    - option_name: NPM_CONFIG_PRODUCTION 
    value: true 

नोट: सुनिश्चित करें कि आप रिक्त स्थान का उपयोग कर रहे हैं, टैब नहीं, क्योंकि यह वाईएएमएल प्रारूप है।

मुझे पता चला कि t1.micro वातावरण में नया node.js कोड अपडेट करने का समय लगभग 5 मिनट से 9 0 सेकेंड तक चला गया, अब यह सभी देवताओं, जैसे कि ग्रंट, कर्म, मोचा, आदि

+8

हाल ही में लोचदार बीनस्टॉक समाधान स्टैक (64 बिट अमेज़ॅन लिनक्स 2014.03 v1.0.4 चल रहा है नोड.जेएस) में ebnode.py स्क्रिप्ट एक 'एनपीएम_यूएसई_PRODUCTION' वैरिएबल का संदर्भ देता है जो' सत्य 'पर डिफ़ॉल्ट है। इसे .config फ़ाइलों में 'झूठी' पर सेट करने के परिणामस्वरूप '- प्रोडक्शन' ध्वज के बिना 'npm install' चलाया जा रहा है। मुझे 'NPM_CONFIG_PRODUCTION' चर का कोई संदर्भ नहीं मिला, हालांकि यह संभव है कि यह' NPM_USE_PRODUCTION' सेट करने के लिए कहीं और उपयोग किया जा सके। किसी भी अमेज़ॅन के कॉन्फ़िगरेशन दस्तावेज़ में किसी भी चर का उल्लेख नहीं किया गया है। – etreworgy

+1

क्या यह 'पोस्टइंस्टॉल' चलाएगा? – Shamoon

+0

स्पष्ट रूप से 'पोस्टइंस्टॉल' नहीं चलाता है, लेकिन यह 'prestart' चलाएगा। वे कैसे एनपीएम उपयोग इतना कठिन बनाने में कामयाब रहे हैं? –

1

एनपीएम-सिकंक्रैप का उपयोग करने के लिए एक अतिरिक्त विकल्प है, जिसमें आपको एक ही समय में अपनी निर्भरताओं को लॉक करने का अतिरिक्त लाभ होता है।

एडब्ल्यूएस लोचदार बीनस्टॉक suggests it here

+1

संदर्भित दस्तावेज में यह भी कहा गया है कि एनपीएम-सिकंक्रैप तैनाती को गति देगा क्योंकि एनपीएम इंस्टॉल केवल एक बार निष्पादित करने की आवश्यकता होगी। – dhollenbeck

3

लोचदार बीनस्टॉक नोड के ढेर के नए संस्करणों में, कॉन्फ़िगरेशन बदल गया है, जैसा कि @ etreworgy की टिप्पणी द्वारा इंगित किया गया है।

if 'NPM_USE_PRODUCTION' not in npm_env: 
    npm_env['NPM_USE_PRODUCTION'] = 'true' 
if npm_env['NPM_USE_PRODUCTION'] == 'true': 

तो, वर्तमान में, यह npm install --production द्वारा डिफ़ॉल्ट उपयोग करता है:

cat /opt/elasticbeanstalk/containerfiles/ebnode.py | grep PRODUCTION 

यह आज के रूप में देता है,:

आप एक EC2 उदाहरण के अंदर चला कर वर्तमान व्यवहार की जांच कर सकते हैं,

उन लोगों को अक्षम करने के लिए (के रूप में मैं था जब मैं इस उत्तर के लिए गया था), तो आप अपने प्रोजेक्ट की रूट फ़ोल्डर में एक .ebextensions फ़ोल्डर के अंदर एक anything.config बनाने के लिए चाहते हैं (जहां कुछ भी वास्तव में इसका मतलब है कुछ भी; नोड, एनपीएम, जो भी आप चाहते हैं), सामग्री के साथ:

option_settings: 
    - namespace: aws:elasticbeanstalk:application:environment 
     option_name: NPM_USE_PRODUCTION 
     value: false 
संबंधित मुद्दे