Статические файлы не найдены с приложением Django / React на AWS - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь развернуть приложение Django / React на AWS.У меня есть проблема, когда сервер не принимает статические файлы.Я думаю, что все настроил правильно, но ничего не показывает.Я не уверен, что пропустил какой-то шаг, потому что он, кажется, корректно работает в PythonAnywhere, но не в AWS.

Вот мои настройки.мои файлы в корневой каталог.Он выводит static files copied to '/home/ubuntu/test/test/static'.

Ошибка, которую я получаю в консоли, выглядит следующим образом GET http://ec2-18-217-253-182.us-east-2.compute.amazonaws.com:5000/static/assets/vendor/bootstrap/css/bootstrap.min.css net::ERR_ABORTED 404 (Not Found)

Я надеюсь, что у кого-то была такая же проблема, потому что несколько других решений в SO не решили проблему.Это структура файла в настоящее время

test/
├── test/
├── frontend/
└── static/

1 Ответ

0 голосов
/ 28 февраля 2019

Вы использовали приложение Create React?Если это так, вам придется настроить ваш PUBLIC_URL, чтобы он указывал на правильную папку.

Поскольку я не знаю, какая у вас точная настройка Django, рассмотрим несколько других вещей:

Правильный URL-адрес (синтаксис 2.1)

urlpatterns += [
    re_path(r'(?P<path>.*)', TemplateView.as_view(template_name='index.html'), name='home')
]

Правильный статический URL-адрес файлов:

# Static files (CSS, JavaScript, Images)

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'media'
BASE_DIR = Path(__file__).resolve().parent.parent

STATICFILES_DIRS = [BASE_DIR.parent / 'build' / 'static']

Правильная конфигурация S3 Bucket:

# utils.py
from storages.backends.s3boto3 import S3Boto3Storage


def StaticRootS3BotoStorage(): return S3Boto3Storage(location='static')


def MediaRootS3BotoStorage(): return S3Boto3Storage(location='media')

и

# conf.py

import os

from django.core.exceptions import ImproperlyConfigured


def get_env_variable(var_name):
    """Get the environment variable or return exception."""
    try:
        return os.environ[var_name]
    except KeyError:
        error_msg = 'Set the {} environment variable'.format(var_name)
        raise ImproperlyConfigured(error_msg)


AWS_ACCESS_KEY_ID = get_env_variable("ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = get_env_variable("SECRET_ACCESS_KEY")
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_STORAGE_BUCKET_NAME = get_env_variable("AWS_BUCKET_NAME")
AWS_S3_CUSTOM_DOMAIN = '%s.s3.eu-central-1.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_LOCATION = 'static'

STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'config.settings.aws.utils.StaticRootS3BotoStorage'

DEFAULT_FILE_STORAGE = 'config.settings.aws.utils.MediaRootS3BotoStorage'
MEDIA_URL = 'https://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
MEDIA_ROOT = MEDIA_URL

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

Для справки - это настройка папки, которую я использую (в случае, если вы боретесь с путями).Внутри aws находятся conf.py и utils.py.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...