Статические активы не отображаются для колбы на эластичном бобовом стебле

Как вы получаете эластичный beanstalk aws для распознавания ваших статических активов в своем флеш-приложении? Я выполнил стандартную /.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

Ответ 1

Я не уверен, где вы помещаете свои статические файлы, но поскольку мои обычно находятся в 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, о которых всегда спрашивают немые старые браузеры.

Ответ 2

На момент написания этой статьи, потратив много времени на борьбу с конфигурацией AWS EB, я отказался от попыток заставить статические файлы работать так, как мы все ожидаем, и обновил мое приложение для создания флэков, чтобы:

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

Это отображает URL-адреса, такие как /s/scripts/my-script.js, и поскольку я всегда использую url_for('static', ...) в своем коде и шаблонах, все продолжало работать и вне AWS.

Обновление от 30.09.2013. Я могу в значительной степени гарантировать, что настройки staticFiles полностью игнорируются в контейнере AWS EB Python.

Изменившееся выше предложение имеет нежелательный недостаток маршрутизации всех статических запросов файла через Flask (возможно, точнее, WSGI). Однако это не очень сложно исправить.

Создайте файл conig для Apache в корне вашего проекта с именем 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, которые он видит.

Ответ 3

У меня была аналогичная проблема, где, как ни странно, все файлы из 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/

Ответ 4

Странная вещь, которую я нашел для решения этой проблемы, заключалась в редактировании моего файла .gitignore. Он включал удаление папок /dist, и это включало папки dist, в которые был сгенерирован мой CSS. Таким образом, файлы css на самом деле отсутствовали при развертывании.

Надеюсь, это поможет любому, кто может быть в одной лодке.

Ответ 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> Эластичный бобовый стебель является супер простым и хорошо документированным! </сарказм >

Ответ 6

Это можно сделать также через панель эластичных панелей:

Конфигурация → Конфигурация программного обеспечения → Статические файлы

а затем

введите описание изображения здесь

как альтернативный вариант