AWSフォーラムを使用して助けを得ようとしましたが、そこには何も得られません。いずれにしても、the original postはまだ存在します。AWS Elastic Beanstalkによってソースコードが公開されています
ここでも同じ質問があります。
私は、Elastic BeanstalkとPythonコンテナを使用してPython(Flask)アプリケーションを配備しました。ディレクトリ構造は、多かれ少なかれ、この(ポイントを取得するために簡略化)である:
- http://myapp-env-blablabla.elasticbeanstalk.com/static/requirements.txt:
[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/secrets/keys.py
- http://myapp-env-blablabla.elasticbeanstalk.com/static/myapp/services/some-app-logic.py
- など
Alias /static /opt/python/current/app/
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
:私の周りつついこれはファイル/etc/httpd/conf.d/wsgi.confにこの設定によって引き起こされることがわかっ
/opt/python/current/app/)にバーチャルパスでを配置してください。
この時点で、.config ebextensionファイルを使用して、デフォルトのPythonコンテナstaticFilesオプション(何となく、ひどいデフォルト値)を上書きするという簡単なことをお勧めします。さて、あなたは私のディレクトリ構造を見れば、あなたはのpython-container.config、持って表示されます:
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "app/myapp/static/"
をしかし、Apacheの設定ファイルが生成されている場合、このファイルは完全に無視されます。 (と思う)、これらのファイルのAWS EBスクリプト(ちょうど重要な行)を見て、それを証明する:
/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です。configは、これらのebextension設定ファイルで指定された値を決して使用しません。 SimplifiedConfigLoader
は、固定ファイルコンテナ構成のみを使用します。これは/staticマッピングの悪いデフォルト値を持ちます。
カスタムAMIに頼らずにこれを防ぐ方法が見つからないため、何かが不足していると思います。
を指すように/静的な仮想パスをマップし、私は私の質問でこれを言及します。それはうまくいきませんでした。これはドキュメントに反するものです。それは正しいルートに見えましたが、Apacheの設定を作成するときにEBの内部スクリプトによって無視されていました。これは2013年10月下旬にAWSによって修正されました。 – sergiopereira