你如何获得aws弹性beanstalk来识别你的烧瓶应用程序中的静态资产?我做了标准的/.ebextensions/python.config几个YAML行a la:
option_settings:
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "static/"
我对模板中资产的所有调用都包含在“{{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
答案 0 :(得分: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
这两个部分似乎都很重要。 (后一部分也有其他内容,但我已经把它留了出来。)我实际上有两个资源路径,/static/
目录和顶级/favicon.ico
文件,这些文件使旧浏览器变得愚蠢总是要求。
答案 1 :(得分:5)
答案 2 :(得分:3)
在撰写本文时,在花了几个小时与AWS EB的配置进行斗争后,我放弃了尝试使静态文件按照我们所期望的方式工作并将我的Flask应用创建更新为:
app = Flask(__name__, static_url_path='/s')
这会呈现/s/scripts/my-script.js
之类的网址,因为我总是在我的代码和模板中使用url_for('static', ...)
,所以一切都继续在AWS之外工作。
2013年9月30日更新:我几乎可以保证在AWS EB的Python容器中完全忽略staticFiles
设置。
我上面建议的更改有不良的缺点,即通过Flask路由所有静态文件请求(可能更准确地说,WSGI。)但这并不是很难修复。
在项目根目录下创建一个名为 app-httpd.conf 的Apache conig文件:
Alias /s /opt/python/current/app/static
<Directory /opt/python/current/app/static>
Order allow,deny
Allow from all
</Directory>
此配置告诉Apache接管任何以/s
开头的URL请求,我们为静态文件选择的相同前缀,并从我们应用的 static 文件夹中提供文件。
在 .ebextensions / custom-apache.config 创建此文件:
container_commands:
add_apache_conf:
command: "cp app-httpd.conf /etc/httpd/conf.d"
此文件将在应用程序部署期间使用,并将新的.config文件复制到Apache配置的目录,以加载它看到的所有.config文件。
答案 3 :(得分:1)
(档案:.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/
...就我而言,这是
value: /static/=distrib/static/
我发现改变了我的
app = Flask(__name__)
到
app = Flask(__name__, static_url_path='/static')
既不必要也不充分。当我只设置static_url_path但不设置StaticFiles时,它不起作用;当我设置StaticFiles而不是static_url_path时,它工作正常。
&lt; sarcasm&gt; Elastic Beanstalk非常直接且记录良好!&lt; / sarcasm&gt;
答案 4 :(得分:1)
我花了很多时间试图找出答案并整理这些建议。我对2020年仍然有用的答案发表了评论。这是我遇到的解决方案的TL; DR:
static files
左导航窗格下Modify Software
屏幕中的Configuration
部分设置属性aws:elasticbeanstalk:container:python:staticfiles
。此配置未映射到Flask查找静态资产所需的static_url_path
。 StaticFiles
,可以通过将.config
文件添加到.ebextensions
目录来设置。 答案 5 :(得分:0)
我遇到了类似的问题,奇怪的是,来自static/img/
的所有文件都已投放,但static/css/
或static/js/
中的任何内容都没有被投放。
为了解决这个问题,我从Flask源的根目录打开了.elasticbeanstalk/optionsettings.app-env
并编辑了这段代码
[aws:elasticbeanstalk:container:python]
NumProcesses=1
NumThreads=15
StaticFiles=/static/.*=
WSGIPath=application.py
[aws:elasticbeanstalk:container:python:staticfiles]
请注意,StaticFiles
实际上采用正则表达式,因此/static/.*
.*
允许/static/
之后的任何路径
答案 6 :(得分:0)
我发现解决此问题的一个奇怪的事情是编辑我的.gitignore文件。它包括删除/ dist文件夹,其中包括我的CSS生成的dist文件夹。所以当我部署时,css文件实际上丢失了。
希望这可以帮助那些可能在同一条船上的人。
答案 7 :(得分:0)
这个问题使我有些困惑,因为它在本地工作。无需更改配置。我在html文件中将第1行更改为第2行,它可以正常工作。将静态文件夹保留在根目录中,并将配置保留在/ static /:/ static /中。
1 <link rel="stylesheet" href={{url_for('static',filename='style.css')}}/>
2 <link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='style.css') }}">
可能是href周围的引号。
答案 8 :(得分:0)
我尝试了迈尔斯·贝克(Myles Baker)的解决方案,但由于部署时收到错误消息而无法正常工作
ERROR Invalid option specification (Namespace: 'aws:elasticbeanstalk:container:python', OptionName: 'StaticFiles')
我最终在.ebextensions / WHATEVER_NAME.config中使用了以下代码-
option_settings:
aws:elasticbeanstalk:environment:proxy:staticfiles:
/html: statichtml
/images: staticimages
这是这里的直接复制/粘贴-https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environment-cfg-staticfiles.html