静态资产不会出现在弹性豆茎上的烧瓶上

use*_*682 11 python amazon-web-services flask amazon-elastic-beanstalk

你如何获得aws弹性beanstalk来识别你的烧瓶应用程序中的静态资产?我做了标准的/.ebextensions/python.config几个YAML行a la:

option_settings:
  "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "static/"
Run Code Online (Sandbox Code Playgroud)

我对模板中资产的所有调用都包含在"{{url_for('static',filename ='img/office.jpg')}}"中.

但是没有图片,样式或JavaScript显示在页面加载.这是一个示例日志文件404.IP - - [25/Feb/2013:21:48:13 +0000]"GET /static/css/bootstrap.css HTTP/1.1"404 328" http://xyz.elasticbeanstalk .com / "

我错过了一些明显的东西吗 一切都运行在我的本地,只是静态资产不加载一旦我git aws.push

oet*_*oni 8

也可以通过Elastic Beanstalk面板完成此操作:

配置->软件配置->静态文件

然后

在此处输入图片说明

作为替代选择


Jes*_*tin 6

我不知道你把静态文件放在哪里,但由于我的通常在app/static,我有:

[aws:elasticbeanstalk:container:python:staticfiles]
/static/=app/static/
/favicon.ico=app/static/favicon.ico

[aws:elasticbeanstalk:container:python]
StaticFiles=/static/=app/static/,/favicon.ico=app/static/favicon.ico
Run Code Online (Sandbox Code Playgroud)

这两个部分似乎都很重要.(后一部分也有其他内容,但我已经把它留了出来.)我实际上有两个资源路径,/static/目录和顶级/favicon.ico文件,老浏览器总是要求愚蠢.

  • @nissemand:这仍然是一个有效的解决方案.我无法让它发挥作用.我假设我需要做的是转到环境的AWS管理页面,选择"Software Configuration"面板,然后将虚拟路径`/ static /`的目录从`static /`更改为`xyz/static /`,其中`xyz`是我项目中包含我的web应用程序包的文件夹(对应于'app`,这里).这是对的(因为它不起作用)? (3认同)
  • `/ static/= app/static /`为我做了.我是天才,我从教程中直接使用`/ static/= static /`.谢谢你结束了长时间的搜索:) (2认同)

ser*_*ira 6

在撰写本文时,在与 AWS EB 的配置进行了数小时的斗争之后,我放弃了让静态文件按照我们所有人期望的方式工作的尝试,并将我的 Flask 应用程序创建更新为:

app = Flask(__name__, static_url_path='/s')
Run Code Online (Sandbox Code Playgroud)

这会呈现 url /s/scripts/my-script.js,因为我总是url_for('static', ...)在我的代码和模板中使用,所以一切都在 AWS 之外继续工作。

2013 年 9 月 30 日更新:我几乎可以保证staticFiles在 AWS EB 的 Python 容器中完全忽略这些设置。

我在上面建议的更改具有通过 Flask 路由所有静态文件请求(也许更准确地说是 WSGI)的不利缺点。不过,这并不难解决。

在您的项目根目录创建一个 Apache conig 文件,命名为app-httpd.conf

Alias /s /opt/python/current/app/static
<Directory /opt/python/current/app/static>
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

此配置告诉 Apache 接管对以 开头的 URL 的任何请求/s,我们为静态文件选择的前缀相同,并从我们的应用程序的静态文件夹中提供文件。

.ebextensions/custom-apache.config创建此文件:

container_commands:
  add_apache_conf:
    command: "cp app-httpd.conf /etc/httpd/conf.d"
Run Code Online (Sandbox Code Playgroud)

此文件将在应用程序部署期间使用,并将新的 .config 文件复制到一个目录,Apache 配置从该目录加载它看到的所有 .config 文件。


Ben*_*ler 5

4 年多以后,我能够使用以下方法获取静态文件:

(文件:.ebextensions/WHATEVER_NAME.config

option_settings:
  - namespace: aws:elasticbeanstalk:container:python
    option_name: StaticFiles
    value: /static/=PATH/FROM/MY/APP/BASE/DIR/TO/STATIC/DIR/
Run Code Online (Sandbox Code Playgroud)

...就我而言,这是

    value: /static/=distrib/static/
Run Code Online (Sandbox Code Playgroud)

我发现改变我的

app = Flask(__name__)
Run Code Online (Sandbox Code Playgroud)

app = Flask(__name__, static_url_path='/static')
Run Code Online (Sandbox Code Playgroud)

既不必要也不充分。当我只设置 static_url_path 而不是 StaticFiles 时,它不起作用;当我设置 StaticFiles 而不是 static_url_path 时,它工作正常。

<sarcasm>Elastic Beanstalk 超级简单,而且文档齐全!</sarcasm>