Django collectstatic не выдает ошибок. Но статические файлы не загружаются на веб-сайт как с отладкой true, так и с false. Файлы на S3

Вступление: Я создал приложение в Django. Я пытаюсь разместить свои статические и мультимедийные файлы в aws s3. Мой проект Django находится на AWS Lambda и AWS Api gateway с использованием Zappa. ниже мои настройки.py

AWS_DEFAULT_ACL = None
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY")
AWS_SECRET_ACCESS_KEY = os.getenv("ACCESS_SECRET_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Затем я создал файл в папке моего проекта, такой же, как мой manage.py, с именем aws_storage_classes.py.

Ниже содержимое моего файла aws_storage_classes.py

from storages.backends.s3boto3 import S3Boto3Storage    

class StaticStorage(S3Boto3Storage):
    location = 'static'

class MediaStorage(S3Boto3Storage):
    location = 'media'

Ниже мои urls

if settings.DEBUG:

    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Также в моих настройках.py

DEBUG = False

Когда я делаю python manage.py collectstatic, все статические файлы загружаются, и я не получаю никаких ошибок. Но при переходе на страницу администратора статические файлы не загружаются. Смотрите изображения ниже

Below is the image of my S3 bucket

Django collectstatic не выдает ошибок. Но статические файлы не загружаются на веб-сайт как с отладкой true, так и с false. Файлы на S3

Below is what is inside the static folder

Django collectstatic не выдает ошибок. Но статические файлы не загружаются на веб-сайт как с отладкой true, так и с false. Файлы на S3

Static files not loading

Django collectstatic не выдает ошибок. Но статические файлы не загружаются на веб-сайт как с отладкой true, так и с false. Файлы на S3

<link rel = "stylesheet" type = "text/css" href = "https://<bucketname>.s3.amazonaws.com/static/style.css?AWSAccessKeyId=AKIAJHJGHJGJGJGJJGJGJMHIFQ&amp;Signature=yfS3%2BvA0q15aUxw7OBySuQWZfjg%3D&amp;x-amz-security-token=FQoGZXIvYXdgljdaksfgdjsgfkjertert;hre;thtires=151232173">

Updated settings.py

AWS_DEFAULT_ACL = None
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY")
AWS_SECRET_ACCESS_KEY = os.getenv("ACCESS_SECRET_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Ниже ссылка после добавления ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

<link rel = "stylesheet" type = "text/css" href = "https://django-static-media.s3.amazonaws.com/static/style.css?AWSAccessKeyId=AKIAGGGGGGGGGMHIFQ&amp;Signature=6gFQTsOSDFSDFA%3D&amp;x-amz-security-token=FQoGZvwbJhd9amp;Expires=1549168642">

Все еще статические файлы не загружаются

Я предоставил своему пользователю полный доступ к s3, поэтому я не думаю, что мне нужно ниже. Также мне удалось успешно добавить статические файлы в S3, и это не дает мне никаких ошибок, связанных с разрешениями. все еще пробую это в соответствии с предложениями ниже

Ниже приведены мои разрешения Я пытался дать разрешение на лямбда-функцию, но она выдает следующую ошибку.

Django collectstatic не выдает ошибок. Но статические файлы не загружаются на веб-сайт как с отладкой true, так и с false. Файлы на S3

Django collectstatic не выдает ошибок. Но статические файлы не загружаются на веб-сайт как с отладкой true, так и с false. Файлы на S3

After changing the static and media URLS

Django collectstatic не выдает ошибок. Но статические файлы не загружаются на веб-сайт как с отладкой true, так и с false. Файлы на S3

🤔 А знаете ли вы, что...
Django поддерживает создание расширений и пакетов для повторного использования кода.


3
538
1

Ответ:

Я вижу, что STATIC_URL и MEDIA_URL настроены неправильно.

изменять

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

К

STATIC_URL = 'https://%s/static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s/media/' % AWS_S3_DOMAIN

Он должен работать.

Следующая ссылка имеет очень хорошее объяснение. https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html