Amazon S3 с Django не может загрузить все статические файлы - PullRequest
0 голосов
/ 19 сентября 2018

Я использую Amazon S3 для хранения статических и мультимедийных файлов.Мой проект Django выполняется в Digital Ocean Ubuntu 16.04.

После запуска python manage.py collectstatic я обнаружил, что CSS и js не работают на моем сайте.А потом я обнаружил, что CSS и js не были загружены в S3.Я думаю, что это причина, почему cs и js не работали, потому что их там нет.

В S3 есть только «статическая» папка. enter image description here

В этой статической папке находятся не статические файлы моего проекта, а статические файлы a dmin xadmin и другого плагина

enter image description here

Выше находится папка под static в S3.

Когда я проверяю URL js, это выглядит так:

<link rel="stylesheet" href="https://myproject.s3.amazonaws.com/css/main.css?Signature=imJphDmnb4U%2BWOWHjE0Iagk2tow%3D&amp;AWSAccessKeyId=AKIAI4LFEI2ASSMOYRTQ&amp;Expires=1537337559">


<link rel="icon" href="https://myproject.s3.amazonaws.com/images/logo-blue.png?Signature=ACidpeC946mBazTtHx0McVIk6rM%3D&amp;AWSAccessKeyId=AKIAI4LFEI2ASSMOYRTQ&amp;Expires=1537337559">

Но в моем проекте main.css находится под статическая папка , изображения находятся в папке media .Это так странно для меня.

Это папка моего проекта выглядит так:

enter image description here

И я обнаружил, что после запуска python manage.py collectstatic система не скопировала статических и мультимедийных данных вообще

Вот основная часть моих настроек.py:

import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))


ROOT_URLCONF = 'myproject.urls'


STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

AWS_ACCESS_KEY_ID = 'myproject'
AWS_SECRET_ACCESS_KEY = 'myproject'
AWS_STORAGE_BUCKET_NAME = 'myproject'
AWS_S3_FILE_OVERWRITE = False
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
# the sub-directories of media and static files
STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
# a custom storage file, so we can easily put static and media in one bucket
STATICFILES_STORAGE = 'myproject.custom_storages.StaticStorage'
DEFAULT_FILE_STORAGE = 'myproject.custom_storages.MediaStorage'

# the regular Django file settings but with the custom S3 URLs
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION)
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION)

Я также создалфайл с именем custom_storages.py:

from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage

class StaticStorage(S3Boto3Storage):
    location = settings.STATICFILES_LOCATION

class MediaStorage(S3Boto3Storage):
    location = settings.MEDIAFILES_LOCATION

Я следовал этому руководству https://blog.bitlabstudio.com/ultra-short-guide-to-django-and-amazon-s3-2c5aae805ce4

Эта проблема действительно очень сложна для меня.Любой друг может помочь?На решение этой проблемы у меня уходит 2 дня.

...