2017-02-25 18 views
6

कल, मैं इस पोस्ट बनाया: DjangoRestFramework browsable api looks different locally vs when deployed on server?Django ऐप को तैनात करते समय AWS को स्थिर फ़ाइलों को कैसे सेवा दें (`python manage.py collectstatic` काम नहीं किया)?

असल में, जब मैं python manage.py runserver किया था, इस दिखाया: local

लेकिन उसके बाद मैं इसे एडब्ल्यूएस (eb deploy) के लिए तैनात किया है, इस जब मैं का उपयोग मैं क्या देख रहा है साइट: on deploy

उपरोक्त पद का उत्तर यह है कि ऐसा इसलिए है क्योंकि मेरी स्थिर फाइलें गायब थीं। तो मैं खोज कैसे एडब्ल्यूएस पर स्टैटिक फ़ाइलें तैनात करने के लिए और इस ट्यूटोरियल में आए: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html#python-django-update-app

"एक साइट प्रशासक बनाएं" अनुभाग के तहत, यह कहा गया है कि स्थिर फ़ाइलों सेवा करने के लिए, मैं पहले STATIC_ROOTsettings.py में (परिभाषित करना होगा ताकि मैंने किया: STATIC_ROOT = os.path.join(BASE_DIR, "ebdjangoapp/static/")) और फिर मैंने eb deploy किया। हालांकि, साइट अभी भी दूसरी छवि (स्थिर फाइलों के बिना) के समान दिखती है। मैंने फिर python manage.py collectstatic करने की कोशिश की (इसने rest_framework निर्देशिका के साथ स्थिर फ़ोल्डर बनाया, जिसमें css फ़ाइलें इत्यादि शामिल हैं) और फिर eb deploy फिर से किया गया लेकिन साइट की स्थिति दूसरी छवि के समान दिखती है।

स्थिर फाइलें अभी भी क्यों दिखाई नहीं दे रही हैं?

ध्यान दें, मैं चारों ओर खोज की है और इस पोस्ट भर में आया था: Django app deployment not loading static files और जवाब का कहना है:

"तुम तो पीछे एक रिवर्स प्रॉक्सी के रूप में अपनी पसंद के वेब सर्वर के माध्यम से settings.STATIC_URL पर settings.STATIC_ROOT सेवा करने के लिए, बहुत सामान्य nginx जरूरत है अपने अपाचे-mod_wsgi ऐप सर्वर। "

लेकिन मुझे नहीं पता कि वेब सर्वर (nginx, रिवर्स प्रॉक्सी, अपाचे-mod_wsgi) कैसे काम करता है। मेरे पास एक Django ऐप है जिसे मैं python manage.py runserver के साथ स्थानीय रूप से चलाता हूं, और मेरे पास एडब्ल्यूएस लोचदार बीनस्टॉक है। मैं eb deploy कर अपने डीजेगो ऐप को एडब्ल्यूएस पर तैनात करता हूं। स्थाई फाइलों को तैनाती पर प्रकट होने के लिए मुझे क्या कदम उठाने की आवश्यकता है (मान लीजिए कि मुझे पता नहीं है कि nginx, रिवर्स प्रॉक्सी इत्यादि को कॉन्फ़िगर कैसे करें)।

+0

क्या आप किसी भी समय 'python manage.py collectstatic'' चला रहे हैं? –

+0

@ ग्राहम डंपलटन हां, मैंने इसे 'डीबी तैनात' करने से ठीक पहले किया था। (असल में, मैंने इसे स्थानीय रूप से किया, और सभी फाइलें स्थिर फ़ोल्डर में रखी गईं, फिर मैंने इसे तैनात किया)। – user2719875

उत्तर

9

रीयलपीथन से 0Wसे एडब्लूएस लोचदार बीनस्टॉक में डीजेंगो ऐप को तैनात करने के बारे में निश्चित मार्गदर्शिका है। यह स्थिर फ़ाइलें और कैसे EB के साथ इसे कॉन्फ़िगर करने के बारे में पूरी अनुभाग है और आप के बारे में nginx/अपाचे आदि

मूल रूप से आप अपने ईबी config में container_commands परिभाषित करना चाहिए, इन आदेशों के बाद निष्पादित किया जाएगा कुछ भी पता करने की जरूरत नहीं आवेदन तैनाती समाप्त हो गई है।

container_commands: 
    01_migrate: 
    command: "source /opt/python/run/venv/bin/activate && python iotd/manage.py migrate --noinput" 
    leader_only: true 
    02_collectstatic: 
    command: "source /opt/python/run/venv/bin/activate && python iotd/manage.py collectstatic --noinput" 

option_settings: 
    "aws:elasticbeanstalk:application:environment": 
    DJANGO_SETTINGS_MODULE: "iotd.settings" 
    "PYTHONPATH": "/opt/python/current/app/iotd:$PYTHONPATH" 
    "ALLOWED_HOSTS": ".elasticbeanstalk.com" 
    "aws:elasticbeanstalk:container:python": 
    WSGIPath: iotd/iotd/wsgi.py 
    NumProcesses: 3 
    NumThreads: 20 
    "aws:elasticbeanstalk:container:python:staticfiles": 
    "/static/": "www/static/" 

वेतन ध्यान aws:elasticbeanstalk:container:python:staticfiles हिस्सा करने के लिए: उदाहरण के migrate और collectstatic के लिए, तो यह ईबी कॉन्फ़िग फ़ाइल में इस तरह के अनुभाग का एक उदाहरण है। और यह भी आप अपने Django सेटिंग में इस हिस्से परिभाषित करना चाहिए फ़ाइल:

STATIC_ROOT = os.path.join(BASE_DIR, "..", "www", "static") 
STATIC_URL = '/static/' 

मैं ऊपर लेख से लगभग पूरी तरह से इस उदाहरण की नकल की है, तो आप वास्तव में, यह जाँच करनी चाहिए यह कमाल का है।

यूपीडी: गायब staticfiles डीबग कैसे करें। मैं आमतौर पर यह (यह अपने ईबी उदाहरण के लिए sshing शामिल है) कार्य करें:

  1. सुनिश्चित करें कि django.contrib.staticfiles मेरी INSTALLED_APPS में शामिल किया गया है।
  2. लापता फ़ाइल उदास करने के लिए ब्राउज़र कंसोल यूआरएल में जांचें। /static/js/somefile.js
  3. सुनिश्चित करें कि मेरी django सेटिंग्स STATIC_URL समान है उदा। /static/
  4. STATIC_ROOT में वास्तविक मान की जांच करें और जांचें कि इस फ़ोल्डर में वास्तव में उत्पादन सर्वर में आपकी स्थिर फ़ाइलें शामिल हैं।
  5. चेक कि मेरे ईबी config फ़ोल्डर को दूर करने के

इसके अलावा, आप अपने उत्पादन सर्वर पर /static dir में स्थिर एकत्र करने के लिए कोशिश कर सकते हैं (यह (config में अपने option_settings धारा के तहत) इशारा कर रही है जहां ईबी डिफ़ॉल्ट रूप से उनके लिए लग रहा है)। यदि अचानक यह काम करना शुरू कर देता है - इसका मतलब है कि आपकी सेटिंग डिफ़ॉल्ट एक को ओवरराइड करने में विफल रही है और आपको यह जांचना चाहिए कि यह कहां परिभाषित किया गया था।

मुझे आशा है कि ये चरण आपको सही दिशा खोजने में मदद करेंगे।

+0

लिंक के लिए धन्यवाद। इसलिए मैंने 'settings.py' संपादित किया ताकि' STATIC_ROOT' और 'STATIC_URL' जो आपने उल्लेख किया हो। मैंने फिर '.ebextensions' फ़ोल्डर के अंदर' 02_python.config' नामक एक फ़ाइल बनाई और कॉपी जो आपने यहां पोस्ट की है उसे चिपकाया। मैं 'iotd' को 'ebdjango' में बदलता हूं (मेरे प्रोजेक्ट का नाम .. मेरा ऐप नाम' ebdjangoapp' है)। मैंने फिर 'पायथन ebjango/manage.py collectstatic --noinput' को' python manage.py collectstatic --noinput' में बदल दिया (चूंकि पाइथन पथ पहले से ही 'ebdjango' तक जाता है)। लेकिन यह अभी भी काम नहीं करता है (सर्वर अभी भी दूसरी छवि की तरह दिखता है)। इस मुद्दे को डीबग करने का कोई विचार है? – user2719875

+0

उत्तर संभावित डीबगिंग चरणों के साथ अद्यतन किया गया है, उम्मीद है कि यह मदद करेगा। – valignatev

+0

अपडेट ने बहुत मदद की! अब, जब मैं 'STATIC_ROOT = os.path.join (BASE_DIR," static ")' और '' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ जब मैं aws के लिए एक पूर्ण या सापेक्ष पथ देता हूं: elasticbeanstalk: कंटेनर: पायथन: staticfiles "' option_settings' में, यह भी काम करता है। लेकिन जब मैं 'STATIC_ROOT' को' os.path.join (BASE_DIR, "..", "www", "static") में बदलता हूं और ''/static/":" www/static/"' ' option_settings', यह स्थिर फ़ाइलों के लिए 404 देता है। जब मैंने इसे ''/static/":" ../ www/static/"' के बराबर दिया, तो यह स्थिर के लिए 403 देता है। – user2719875

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