Python AWS Elastic Beanstalk公开的源代码

Python AWS Elastic Beanstalk公开的源代码,python,amazon-web-services,flask,amazon-elastic-beanstalk,Python,Amazon Web Services,Flask,Amazon Elastic Beanstalk,我曾尝试使用AWS论坛寻求帮助,但是,哦,天哪,在那里很难得到任何帮助。无论如何,它仍然存在 这是同样的问题 我使用Elastic Beanstalk和Python容器部署了一个Python(Flask)应用程序。目录结构大致如下(简化为切中要害): 我发现我的应用程序中的任何文件都可以通过浏览以下URL进行检索: 等 我翻了翻,发现这是由文件/etc/httpd/conf.d/wsgi.conf中的配置引起的: Alias /static /opt/python/current/ap

我曾尝试使用AWS论坛寻求帮助,但是,哦,天哪,在那里很难得到任何帮助。无论如何,它仍然存在

这是同样的问题

我使用Elastic Beanstalk和Python容器部署了一个Python(Flask)应用程序。目录结构大致如下(简化为切中要害):

我发现我的应用程序中的任何文件都可以通过浏览以下URL进行检索:

我翻了翻,发现这是由文件/etc/httpd/conf.d/wsgi.conf中的配置引起的:

Alias /static /opt/python/current/app/ 
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
{
    "python": {
        //...
        "static_files": [
            "/static="
        ], 
        //...
}
但是在生成Apache配置文件时,该文件被完全忽略。为了(我认为)证明这一点,请查看这些文件中的AWS EB脚本(仅重要行):

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

Alias /static /opt/python/current/app/ 
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
{
    "python": {
        //...
        "static_files": [
            "/static="
        ], 
        //...
}
configuration=config.SimplifiedConfigLoader().load_config()
config.generate\u apache\u config(
配置,os.path.join(config.ON_DECK_DIR,'wsgi.conf'))
/opt/elasticbeanstalk/hooks/appdeploy/pre/04configen.py

Alias /static /opt/python/current/app/ 
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
{
    "python": {
        //...
        "static_files": [
            "/static="
        ], 
        //...
}
configuration=config.SimplifiedConfigLoader().load_config()
config.generate\u apache\u config(
配置,os.path.join(config.ON_DECK_DIR,'wsgi.conf'))
/opt/elasticbeanstalk/hooks/config.py

Alias /static /opt/python/current/app/ 
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
{
    "python": {
        //...
        "static_files": [
            "/static="
        ], 
        //...
}
def\u生成\u静态\u文件\u配置(映射):
内容=[]
对于键,映射.items()中的值:
contents.append('别名%s%s'(键,os.path.join(APP\u DIR,value)))
contents.append(“”%os.path.join(APP_DIR,value))
contents.append('Order allow,deny')
contents.append('Allow from all')
contents.append(“”)
contents.append(“”)
返回'\n'。加入(内容)
类SimplifiedConfigLoader(ContainerConfigLoader):
def加载_配置(自身):
parsed=json.load(“path/to/containerconfiguration”)
python_section=parsed['python']
转换={}
#…剪断。。。
静态_文件={}
对于python_部分['static_files']中的keyval:
key,value=keyval.split('=',1)
静态_文件[键]=值
已转换['static_files']=静态_文件
#...
转换收益
/opt/elasticbeanstalk/deploy/configuration/container配置

Alias /static /opt/python/current/app/ 
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
{
    "python": {
        //...
        "static_files": [
            "/static="
        ], 
        //...
}
我很抱歉转储了这么多代码,但其要点是,当调用
\u generate\u static\u file\u config
来生成wsgi.config的这一部分时,它从不使用那些ebextension配置文件中指定的任何值
SimplifiedConfigLoader
仅使用固定文件容器配置,该配置具有/static映射的默认值


我希望我遗漏了一些东西,因为我无法找到一种方法来防止这种情况,而不求助于自定义AMI。

我最终打开了一个AWS支持的付费案例,他们确认这是Python容器代码中的一个bug

由于这个问题,他们刚刚发布了(2013年10月25日)该容器的新版本,任何新环境都将包含该修复程序。要修复任何现有环境。。。嗯,你不能。您必须从头开始创建一个新环境(甚至不使用保存的配置),然后从旧环境切换

希望这能帮助下一个可怜的灵魂


更新2017-01-10:当我回答无法将容器升级到新版本时。从那时起,AWS增加了这一功能。您甚至可以使用托管平台更新功能让其自动更新。

您还可以通过Elastic Beanstalk环境上的配置控制台更改所述
/static
别名的值。在“静态文件”部分,将虚拟路径/Static映射到您的目录app/myapp/Static/

我在问题中提到了这一点。它不起作用,这与文件不符。这似乎是正确的路由,但在创建Apache配置时,EB内部脚本忽略了它。美国焊接学会于2013年10月下旬对此进行了修正。