2013-10-14 16 views
10

द्वारा स्रोत कोड का खुलासा किया जा रहा है मैंने सहायता प्राप्त करने के लिए एडब्लूएस मंचों का उपयोग करने की कोशिश की है, लेकिन हे लड़का, वहां कुछ भी हासिल करना मुश्किल है। किसी भी मामले में, the original post अभी भी वहां है।एडब्ल्यूएस लोचदार बीनस्टॉक

यहां एक ही प्रश्न है।

मैंने लोचदार बीनस्टॉक और पायथन कंटेनर का उपयोग करके एक पायथन (फ्लास्क) ऐप तैनात किया।

[app root] 
    - application.py 
    - requirements.txt 
    /.ebextensions 
     - python-container.config 
    /secrets 
     - keys.py 
     - secret_logic.py 
    /myapp 
     - __init__.py 
     /static 
     - image1.png 
     - some-other-file.js 
     /services 
     - __init__.py 
     - some-app-logic.py 

मैंने पाया कि मेरे एप्लिकेशन में किसी भी फाइल निम्न URL में के रूप में ब्राउज़ के द्वारा प्राप्त किया जा सकता है:

मैं चारों ओर poked और पाया कि इस /etc/httpd/conf.d/wsgi.conf फ़ाइल में इस config के कारण होता है:

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

मूल रूप से इस अपने पूरे एप्लिकेशन को पढ़ने के लिए पहुंच की अनुमति देता है (/ऑप्ट/पायथन/वर्तमान/ऐप/ पर तैनात) /स्थिर वर्चुअल पथ के माध्यम से तैनात किया गया।

इस बिंदु कोई सुझाव दे सकता है कि यह (, क्या एक भयानक डिफ़ॉल्ट मान माध्यम से) डिफ़ॉल्ट अजगर कंटेनर StaticFiles विकल्प अधिभावी एक .config ebextension फ़ाइल का उपयोग करने का एक सरल बात है पर। खैर, अगर आप मेरी निर्देशिका संरचना को देखो, आप अजगर-container.config, जो देखेंगे:

"aws:elasticbeanstalk:container:python:staticfiles": 
    "/static/": "app/myapp/static/" 

लेकिन इस फाइल को पूरी तरह से नजरअंदाज कर दिया है जब अपाचे विन्यास फाइल उत्पन्न कर रहे हैं। करने के लिए (मुझे लगता है कि) साबित होता है कि, इन फ़ाइलों में एडब्ल्यूएस ईबी स्क्रिप्ट (सिर्फ महत्वपूर्ण लाइनों) को देखो:

/opt/elasticbeanstalk/hooks/configdeploy/pre/01generate.py:

configuration = config.SimplifiedConfigLoader().load_config() 
config.generate_apache_config(
    configuration, os.path.join(config.ON_DECK_DIR, 'wsgi.conf')) 

/opt/elasticbeanstalk/hooks/appdeploy/pre/04configen.py:

configuration = config.SimplifiedConfigLoader().load_config() 
config.generate_apache_config(
    configuration, os.path.join(config.ON_DECK_DIR, 'wsgi.conf')) 

/opt/elasticbeanstalk/hooks/config.py:

def _generate_static_file_config(mapping): 
    contents = [] 
    for key, value in mapping.items(): 
     contents.append('Alias %s %s' % (key, os.path.join(APP_DIR, value))) 
     contents.append('<Directory %s>' % os.path.join(APP_DIR, value)) 
     contents.append('Order allow,deny') 
     contents.append('Allow from all') 
     contents.append('</Directory>') 
     contents.append('') 
    return '\n'.join(contents) 

class SimplifiedConfigLoader(ContainerConfigLoader): 
    def load_config(self): 
     parsed = json.loads("path/to/containerconfiguration") 
     python_section = parsed['python'] 
     converted = {} 
     #..snip... 
     static_files = {} 
     for keyval in python_section['static_files']: 
      key, value = keyval.split('=', 1) 
      static_files[key] = value 
     converted['static_files'] = static_files 
     #... 
     return converted 

/opt/elasticbeanstalk/तैनाती/विन्यास/containerconfiguration:

{ 
    "python": { 
     //... 
     "static_files": [ 
      "/static=" 
     ], 
     //... 
} 

मैं इतना कोड डंपिंग के लिए हमें खेद है, लेकिन यह का सार है कि जब _generate_static_file_config उस भाग का निर्माण करने के कहा जाता है wsgi का।कॉन्फ़िगर, यह उन ebextension कॉन्फ़िगरेशन फ़ाइलों में निर्दिष्ट मानों का कभी भी उपयोग नहीं करता है। SimplifiedConfigLoader केवल निश्चित फ़ाइल कंटेनर कॉन्फ़िगरेशन का उपयोग करता है, जिसमें /स्थिर मैपिंग के लिए बुरा डिफ़ॉल्ट मान है।

मुझे आशा है कि मुझे कुछ याद आ रहा है क्योंकि मुझे कस्टम एएमआई का उपयोग किए बिना इसे रोकने का कोई तरीका नहीं मिल रहा है।

उत्तर

7

मैंने एडब्ल्यूएस समर्थन के साथ एक भुगतान केस खोलना समाप्त कर दिया और उन्होंने पुष्टि की कि यह पायथन कंटेनर कोड में एक बग था।

इस समस्या के परिणामस्वरूप, उन्होंने अभी (10/25/2013) कंटेनर का एक नया संस्करण जारी किया है और किसी भी नए वातावरण में फिक्स होगा। अपने मौजूदा वातावरण को ठीक करने के लिए ... अच्छा, आप नहीं कर सकते। आपको ग्राउंड अप से एक नया वातावरण बनाना होगा (सहेजी गई कॉन्फ़िगरेशन का भी उपयोग न करें) और फिर पुराने से स्विच करें।

आशा है कि इससे अगली गरीब आत्मा में मदद मिलेगी।

अपडेट 2017-01-10: जब मैंने जवाब दिया कि कंटेनर को नए संस्करणों में अपग्रेड करना संभव नहीं था। तब से एडब्ल्यूएस ने उस सुविधा को जोड़ा। आप इसे प्रबंधित प्लेटफ़ॉर्म अपडेट सुविधा के साथ स्वतः अपडेट भी कर सकते हैं।

0

आप अपने लोचदार बीनस्टॉक पर्यावरण पर कॉन्फ़िगरेशन कंसोल के माध्यम से कहा गया /static उपनाम का मूल्य भी बदल सकते हैं। "स्टैटिक फ़ाइलें" अनुभाग में, अपनी निर्देशिका एप्लिकेशन/MyApp/स्थिर/

+0

मैं इस मेरे सवाल में उल्लेख करने के लिए बात करने के लिए आभासी पथ /स्थिर मैप करें। यह काम नहीं कर रहा था, जो दस्तावेज़ों के खिलाफ चला जाता है। यह सही मार्ग लग रहा था लेकिन अपाचे कॉन्फ़िगरेशन बनाते समय इसे ईबी आंतरिक स्क्रिप्ट द्वारा अनदेखा किया जा रहा था। यह अक्टूबर 2013 के अंत में एडब्ल्यूएस द्वारा तय किया गया था। – sergiopereira

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