द्वारा स्रोत कोड का खुलासा किया जा रहा है मैंने सहायता प्राप्त करने के लिए एडब्लूएस मंचों का उपयोग करने की कोशिश की है, लेकिन हे लड़का, वहां कुछ भी हासिल करना मुश्किल है। किसी भी मामले में, 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 में के रूप में ब्राउज़ के द्वारा प्राप्त किया जा सकता है:
- http://myapp-env-blablabla.elasticbeanstalk.com/static/requirements.txt निर्देशिका संरचना और अधिक या कम इस (बात करने के लिए प्राप्त करने के लिए सरलीकृत) है
- http://myapp-env-blablabla.elasticbeanstalk.com/static/secrets/keys.py
- http://myapp-env-blablabla.elasticbeanstalk.com/static/myapp/services/some-app-logic.py
- आदि
मैं चारों ओर 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
केवल निश्चित फ़ाइल कंटेनर कॉन्फ़िगरेशन का उपयोग करता है, जिसमें /स्थिर मैपिंग के लिए बुरा डिफ़ॉल्ट मान है।
मुझे आशा है कि मुझे कुछ याद आ रहा है क्योंकि मुझे कस्टम एएमआई का उपयोग किए बिना इसे रोकने का कोई तरीका नहीं मिल रहा है।
मैं इस मेरे सवाल में उल्लेख करने के लिए बात करने के लिए आभासी पथ /स्थिर मैप करें। यह काम नहीं कर रहा था, जो दस्तावेज़ों के खिलाफ चला जाता है। यह सही मार्ग लग रहा था लेकिन अपाचे कॉन्फ़िगरेशन बनाते समय इसे ईबी आंतरिक स्क्रिप्ट द्वारा अनदेखा किया जा रहा था। यह अक्टूबर 2013 के अंत में एडब्ल्यूएस द्वारा तय किया गया था। – sergiopereira