13

您如何让 aws elastic beanstalk 识别您的烧瓶应用程序中的静态资产?我做了标准的 /.ebextensions/python.config 几行 YAML 行:

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 就不会加载

4

8 回答 8

11

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

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

接着

在此处输入图像描述

只是作为替代选择

于 2017-11-15T09:28:42.297 回答
6

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

app = Flask(__name__, static_url_path='/s')

这会呈现 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>

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

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

container_commands:
  add_apache_conf:
    command: "cp app-httpd.conf /etc/httpd/conf.d"

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

于 2013-07-02T21:19:16.997 回答
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/

...就我而言,这是

    value: /static/=distrib/static/

我发现改变我的

app = Flask(__name__)

app = Flask(__name__, static_url_path='/static')

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

<sarcasm>Elastic Beanstalk 非常简单明了,并且有据可查!</sarcasm>

于 2017-09-13T18:55:13.337 回答
1

我花了很多时间试图弄清楚这一点并整理这些建议。我已经对 2020 年仍然相关的答案发表了评论。这是我遇到的解决方案的 TL;DR:

  • Elastic Beanstalk UI 左侧导航窗格下方的屏幕static files部分设置属性。此配置不会映射到Flask 需要查找静态资产的位置。Modify SoftwareConfigurationaws:elasticbeanstalk:container:python:staticfilesstatic_url_path
  • 要设置的正确属性是StaticFiles,可以通过将.config文件添加到.ebextensions目录来设置。

在这里阅读更多。

于 2020-02-24T04:15:46.237 回答
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

于 2020-11-03T18:24:06.250 回答
0

我发现解决这个问题的一个奇怪的事情是编辑我的 .gitignore 文件。它包括删除 /dist 文件夹,其中包括我的 CSS 生成到的 dist 文件夹。因此,当我部署时,css 文件实际上丢失了。

希望这可以帮助任何可能在同一条船上的人。

于 2016-11-28T00:27:56.410 回答
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 周围的引号。

于 2019-12-31T02:48:34.057 回答
-1

我有一个类似的问题,奇怪的是,所有文件static/img/都在被提供,但是任何东西static/css/static/js/没有被提供。

为了解决这个问题,我.elasticbeanstalk/optionsettings.app-env从 Flask 源的根目录打开并将这段代码编辑为

[aws:elasticbeanstalk:container:python]
NumProcesses=1
NumThreads=15
StaticFiles=/static/.*=
WSGIPath=application.py

[aws:elasticbeanstalk:container:python:staticfiles]

请注意,StaticFiles实际上需要一个正则表达式,因此在/static/.*允许.*之后的任何路径/static/

于 2013-10-03T05:16:39.983 回答