python - 带有 Django 的 Amazon S3 无法加载所有静态文件
问题描述
我使用 Amazon S3 作为我的静态和媒体文件存储。我的 Django 项目在 Digital Ocean ubuntu 16.04 中运行。
运行后,python manage.py collectstatic
我发现 CSS 和 js 在我的网站中不起作用。然后我发现 CSS 和 js 没有在 S3 中上传。我认为这就是为什么 cs 和 js 不工作的原因,因为它们不在那里。
在这个静态文件夹中没有我的项目静态文件,而是一个admin xadmin 和另一个插件的静态文件
以上是S3中static下的文件夹。
当我检查 js 的 url 时,它看起来像这样:
<link rel="stylesheet" href="https://myproject.s3.amazonaws.com/css/main.css?Signature=imJphDmnb4U%2BWOWHjE0Iagk2tow%3D&AWSAccessKeyId=AKIAI4LFEI2ASSMOYRTQ&Expires=1537337559">
<link rel="icon" href="https://myproject.s3.amazonaws.com/images/logo-blue.png?Signature=ACidpeC946mBazTtHx0McVIk6rM%3D&AWSAccessKeyId=AKIAI4LFEI2ASSMOYRTQ&Expires=1537337559">
但在我的项目中 main.css 在静态文件夹下,图像在媒体文件夹下。这对我来说太奇怪了。
这是我的项目文件夹的样子:
我发现,运行系统后根本python manage.py collectstatic
没有复制静态和媒体
这是我的 settings.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天时间来解决。
解决方案
推荐阅读
- c# - 没有任何 xml 标签的自定义对象 XML 序列化
- php - phpmysql中的贸易结算日期
- java - 运行 if 语句一段时间
- python - Python连接到firebird docker数据库
- php - Symfony 3.4 中的删除/截断表无法正常工作
- c++ - 在 Qt 上添加小部件并将它们排列到屏幕的角落
- vue.js - 路由更改时元素上的 Vue 转换
- javascript - 如何关闭通过另一个函数的 polyfill 生成的 showModalDialog()?
- java - XML 文件解析的文件过早结束异常经常发生但不经常发生。
- json - 更新 json 文件中的数据