带有Django的Amazon S3无法加载所有静态文件

时间:2018-09-19 05:53:09

标签: python django amazon-s3 boto3 django-storage

我正在使用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

上面是S3中static下的文件夹。

当我检查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位于 static 文件夹下,图像位于 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天的时间来解决。

0 个答案:

没有答案