2013-02-25 16 views
10

पर फ्लास्क के लिए दिखाई नहीं देती है, आप अपने फ्लास्क ऐप में अपनी स्थिर संपत्तियों को पहचानने के लिए अजीब बीनस्टॉक कैसे प्राप्त करते हैं? मैं मानक /.ebextensions/python.config एक ला YAML लाइनों की जोड़ी ने क्या किया: टेम्पलेट्स में संपत्ति "{{url_for ('स्थिर', फ़ाइल नाम = 'img में लिपटे रहे हैंस्थैतिक संपत्ति लोचदार बीनस्टॉक

option_settings: 
    "aws:elasticbeanstalk:container:python:staticfiles": 
    "/static/": "static/" 

मेरे कॉल के सभी/office.jpg ')}} "चीजें टाइप करें।

लेकिन पृष्ठ लोड पर कोई छवियां, शैलियों या जावास्क्रिप्ट दिखाई नहीं देते हैं। यहाँ एक उदाहरण लॉग फ़ाइल 404. आईपी है - - [25/फ़रवरी/2013: 21: 48: 13 +0000] "प्राप्त /static/css/bootstrap.css HTTP/1.1" 404 328 "http://xyz.elasticbeanstalk.com/"

क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है? सब कुछ अपने स्थानीय, बस स्थिर संपत्ति पर महान चलाता लोड न एक बार मैं git aws.push

+0

मुझे एक ही समस्या है मी, बोतल को छोड़कर। मेरे पास बोतल में सबफ़ोल्डर/स्थिर में गुच्छा है, मेरे पास एक मार्ग है जो '@route ('/static /: path #। + # ') कहता है और यह ठीक काम करता है, लेकिन मैं इसे बीनस्टॉक में काम नहीं कर सकता । उम्मीद है कि किसी के पास हमारे लिए जवाब है! –

उत्तर

6

मुझे यकीन है कि जहां आप अपने स्टैटिक फ़ाइलें डाल नहीं कर रहा हूँ, लेकिन जब से मेरा app/static में आम तौर पर कर रहे हैं, मेरे पास है:

[aws:elasticbeanstalk:container:python:staticfiles] 
/static/=app/static/ 
/favicon.ico=app/static/favicon.ico 

[aws:elasticbeanstalk:container:python] 
StaticFiles=/static/=app/static/,/favicon.ico=app/static/favicon.ico 

दोनों वर्ग महत्वपूर्ण हैं। (बाद वाले खंड में इसमें अन्य सामान भी हैं लेकिन मैंने इसे छोड़ दिया है।) मेरे पास वास्तव में दो संसाधन पथ हैं, /static/ निर्देशिका और शीर्ष-स्तर /favicon.ico फ़ाइल जो पुराने पुराने ब्राउज़र हमेशा पूछते हैं।

+2

'/ static/= ऐप/स्थैतिक/यह मेरे लिए किया था। जीनियस कि मैं था कि मैं ट्यूटोरियल से सीधे '/ स्थिर/= स्थैतिक /' था। एक लंबी खोज समाप्त करने के लिए धन्यवाद :) – Felix

+1

@ निसानमंड: क्या यह अभी भी एक वैध समाधान है। मैं इसे काम नहीं कर सकता। मुझे लगता है कि मुझे जो करना है वह पर्यावरण के लिए एडब्ल्यूएस प्रशासन पृष्ठ पर जाना है, "सॉफ्टवेयर कॉन्फ़िगरेशन" पैनल का चयन करें, और वर्चुअल पथ '/ static /' के लिए निर्देशिका को स्थिर/'से' xyz तक बदलें/स्थिर/', जहां' xyz' मेरे प्रोजेक्ट में फ़ोल्डर है जिसमें मेरा वेब ऐप पैकेज है (यहां 'ऐप' के अनुरूप)। क्या यह सही है (क्योंकि यह काम नहीं करता है)? – orome

+0

मेरे जीवन के लिए मैं यह काम नहीं कर सकता। मैं ईबी पर एक पिरामिड आवेदन चला रहा हूँ। क्या किसी के पास सलाह है? मेरे द्वारा किए गए प्रश्न का एक लिंक यहां दिया गया है: https: // stackoverflow।कॉम/प्रश्न/47046273/स्थैतिक-फाइल-फॉर-पिरामिड-एप्लिकेशन-ऑन-लोचदार-बीनस्टॉक –

3

इस लेखन के रूप में, एडब्ल्यूएस ईबी के config के साथ लड़ रहे कई घंटे बिताने के बाद, मैं बनाने के लिए स्टैटिक फ़ाइलें जिस तरह से हम सब उम्मीद से काम की कोशिश कर छोड़ दिया और करने के लिए अपने बोतल एप्लिकेशन निर्माण अद्यतन:

app = Flask(__name__, static_url_path='/s') 

यह /s/scripts/my-script.js जैसे यूआरएल प्रस्तुत करता है और चूंकि मैं हमेशा अपने कोड और टेम्पलेट्स में url_for('static', ...) का उपयोग करता हूं, सब कुछ एडब्ल्यूएस के बाहर भी काम करना जारी रखता है।

9/30/2013 पर अपडेट: मैं बहुत अधिक गारंटी दे सकता हूं कि staticFiles सेटिंग्स को एडब्ल्यूएस ईबी के पायथन कंटेनर में पूरी तरह से अनदेखा किया जाता है।

मेरे द्वारा ऊपर दिए गए परिवर्तन में फ्लास्क (शायद, अधिक सटीक, डब्लूएसजीआई) के माध्यम से सभी स्थिर फ़ाइल अनुरोधों को रूट करने का अवांछित नकारात्मक पक्ष है, हालांकि इसे ठीक करना मुश्किल नहीं है।

अपनी परियोजना जड़ में एक अपाचे conig फ़ाइल बनाएँ, एप्लिकेशन-httpd.conf नामित:

Alias /s /opt/python/current/app/static 
<Directory /opt/python/current/app/static> 
Order allow,deny 
Allow from all 
</Directory> 

इस config अपाचे बताता /s के साथ शुरू यूआरएल के लिए किसी भी अनुरोध पर कब्जा करने, एक ही उपसर्ग हम के लिए चुना हमारी स्थिर फाइलें, और हमारे ऐप के स्थिर फ़ोल्डर से फ़ाइलें प्रदान करती हैं।

.ebextensions/कस्टम apache.config में इस फ़ाइल बनाएँ:

container_commands: 
    add_apache_conf: 
    command: "cp app-httpd.conf /etc/httpd/conf.d" 

इस फ़ाइल एप्लिकेशन तैनाती के दौरान इस्तेमाल किया जाएगा और एक निर्देशिका है जहाँ से अपाचे है करने के लिए नए .config फ़ाइल की प्रतिलिपि बनाएगा यह देखे गए सभी .config फ़ाइलों को लोड करने के लिए कॉन्फ़िगर करें।

+0

['.ebextensions/*। config' फ़ाइलों और' .elasticbeanstalk/optionsettings। * 'files] के बीच संबंध क्या है (http : //stackoverflow.com/q/27907203/656912)? – orome

+0

**। Elasticbeanstalk ** निर्देशिका, जहां तक ​​मैं समझता हूं, आपकी परियोजना के लिए स्थानीय सेटिंग्स रखता है। इन सेटिंग्स का उपयोग 'eb' कमांड लाइन टूल्स द्वारा किया जाता है, जिसमें आप 'git aws.push' चलाते हैं। मैंने व्यक्तिगत रूप से इन उपकरणों का उपयोग करना बंद कर दिया और अपनी एपीआई का उपयोग करके अपनी स्क्रिप्ट लिखी। मेरे मामले में, पायथन के लिए, मैं बोटो पैकेज का उपयोग करता हूं। **। Ebextensions ** में सामान को आपके ऐप के साथ शामिल किया जाता है जब इसे तैनात या अपडेट किया जाता है। इसमें सेटिंग या कमांड शामिल हैं जो आपके ऐप सर्वर पर तैनाती पर निष्पादित किए जाएंगे। – sergiopereira

0

मैं static/css/ में एक ऐसी ही समस्या जहां, अजीब पर्याप्त, static/img/ से सभी फाइलों को परोसा जा रहा था, लेकिन कुछ भी था या static/js/ बस सेवा नहीं जा रहा था।

इसे ठीक करने के मैं बोतल स्रोत के रूट निर्देशिका से .elasticbeanstalk/optionsettings.app-env खोला और कोड के इस ब्लॉक को संपादित, होना करने के लिए

[aws:elasticbeanstalk:container:python] 
NumProcesses=1 
NumThreads=15 
StaticFiles=/static/.*= 
WSGIPath=application.py 

[aws:elasticbeanstalk:container:python:staticfiles] 

ध्यान दें कि StaticFiles वास्तव में एक नियमित अभिव्यक्ति लेता है ताकि /static/.* में .* किसी के लिए अनुमति देता है /static/

+0

['.ebextensions/*। Config' फ़ाइलों और' .elasticbeanstalk/optionsettings। * 'Files] के बीच संबंध क्या है (http://stackoverflow.com/q/27907203/656912)? – orome

0

के बाद पथ इस समस्या को हल करने के लिए मुझे मिली एक अजीब चीज मेरी .gitignore फ़ाइल को संपादित कर रही थी। इसमें/dist फ़ोल्डरों को हटाने में शामिल था, और इसमें मेरे सीएसएस को उत्पन्न करने वाले डिस्ट फ़ोल्डरों को शामिल किया गया था। इसलिए जब मैंने तैनात किया तो सीएसएस फ़ाइलें वास्तव में गायब थीं।

आशा है कि यह किसी भी नाव में रहने वाले किसी भी व्यक्ति की मदद कर सकता है।

(फ़ाइल: .ebextensions/WHATEVER_NAME.config)

0

4+ साल बाद, मैं स्थिर फ़ाइलों का उपयोग कर काम कर प्राप्त करने में सक्षम हूँ

option_settings: 
    - namespace: aws:elasticbeanstalk:container:python 
    option_name: StaticFiles 
    value: /static/=PATH/FROM/MY/APP/BASE/DIR/TO/STATIC/DIR/ 

... मेरे मामले में, यह था

value: /static/=distrib/static/ 

मैंने पाया कि मेरे

app = Flask(__name__) 

से

app = Flask(__name__, static_url_path='/static') 

न तो आवश्यक था और न ही पर्याप्त था। जब मैं केवल static_url_path सेट करता हूं लेकिन स्टेटिकफाइल नहीं करता, तो यह काम नहीं करता; जब मैं स्टेटिकफाइल सेट करता हूं लेकिन static_url_path नहीं, तो यह ठीक काम करता है।

< कटाक्ष> लोचदार बीनस्टॉक सुपर सीधा और अच्छी तरह से प्रलेखित है! </व्यंग्य>

0

यह लचीला बीनस्टॉक कक्ष के माध्यम से भी किया जा सकता है:

विन्यास -> सॉफ्टवेयर विन्यास -> स्टेटिक फ़ाइलें

और फिर

enter image description here

बस के रूप में एक वैकल्पिक विकल्प

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