Django配置Google Cloud Storage后collectstatic静态文件未上传到指定目录
解决方案
方法一:自定义存储类(推荐,可同时区分静态、媒体文件存储路径)
- 首先在项目核心目录(比如
core/下)新建storage.py,写入如下代码:
from storages.backends.gcloud import GoogleCloudStorage # 静态文件存储类,指定存储路径为存储桶下的static目录 class StaticStorage(GoogleCloudStorage): location = "static" # 可选配置:静态文件默认公开可读,根据你的权限需求调整 default_acl = "public-read" # 媒体文件存储类,指定存储路径为存储桶下的media目录,避免和静态文件混淆 class MediaStorage(GoogleCloudStorage): location = "media" # 可选配置:禁止覆盖重名媒体文件,避免意外资源丢失 file_overwrite = False
- 修改
core/settings/local.py的存储配置,替换为自定义的存储类:
from .base import * # noqa ALLOWED_HOSTS = ["*"] DEBUG = True INSTALLED_APPS += ["django_extensions", ] # 替换为自定义的存储类 DEFAULT_FILE_STORAGE = "core.storage.MediaStorage" STATICFILES_STORAGE = "core.storage.StaticStorage" GS_BUCKET_NAME = "name-bucket" # 可选配置:同步修改静态/媒体文件的访问URL前缀,保证资源可正常访问 STATIC_URL = f"https://storage.googleapis.com/{GS_BUCKET_NAME}/static/" MEDIA_URL = f"https://storage.googleapis.com/{GS_BUCKET_NAME}/media/"
方法二:全局配置存储根路径(仅适合不需要区分静态和媒体文件的场景)
如果不需要分开存储静态和媒体文件,直接在core/settings/local.py中添加GS_LOCATION配置即可:
# 其他配置保持不变,新增这一行 GS_LOCATION = "static"
这种方法会让所有通过GCS存储的文件(包括静态、媒体文件)都存到static目录下,适合简单场景使用。
配置完成后重新执行python manage.py collectstatic,静态文件就会自动上传到存储桶的static目录下了。
内容的提问来源于stack exchange,提问作者Piwero
相关产品推荐
相关产品推荐

