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
我不知道你把静态文件放在哪里,但由于我的通常在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文件,老浏览器总是要求愚蠢.
在撰写本文时,在与 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 文件。
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>
| 归档时间: |
|
| 查看次数: |
5040 次 |
| 最近记录: |