2013-10-14 24 views
10

AWSフォーラムを使用して助けを得ようとしましたが、そこには何も得られません。いずれにしても、the original postはまだ存在します。AWS Elastic Beanstalkによってソースコードが公開されています

ここでも同じ質問があります。

私は、Elastic BeanstalkとPythonコンテナを使用してPython(Flask)アプリケーションを配備しました。ディレクトリ構造は、多かれ少なかれ、この(ポイントを取得するために簡略化)である:

基本的にはこれが(私の全体のアプリケーションへのアクセスを読むことができます

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に頼らずにこれを防ぐ方法が見つからないため、何かが不足していると思います。

答えて

7

AWSサポートで有償のケースを開いたところ、Pythonコンテナコードのバグであることが確認されました。

この問題の結果、彼らはコンテナの新しいバージョンをリリースしました(2013年10月25日)、新しい環境には修正が含まれます。あなたの既存の環境を修正するには...まあ、できません。初心者から新しい環境を作り(保存した設定を使用しないでください)、古いものから新しい環境に切り替える必要があります。

これは、次の悪い魂に役立ちます。

更新2017-01-10:私が答えたときに、新しいバージョンにコンテナをアップグレードすることはできませんでした。それ以来、AWSはその機能を追加しました。 管理対象プラットフォームアップデート機能で自動更新させることもできます。

0

また、上記/staticエイリアスの値を、Elastic Beanstalk環境の設定コンソールから変更することもできます。 「静的ファイル」セクションで、自分のディレクトリにアプリ/ myappの/静的/

+0

を指すように/静的な仮想パスをマップし、私は私の質問でこれを言及します。それはうまくいきませんでした。これはドキュメントに反するものです。それは正しいルートに見えましたが、Apacheの設定を作成するときにEBの内部スクリプトによって無視されていました。これは2013年10月下旬にAWSによって修正されました。 – sergiopereira

関連する問題