django - 在 Elastic Beanstalk Aws React Django 上托管站点时如何从单独的 S3 存储桶加载静态文件
问题描述
设置:在 Elastic Beanstalk 上托管的 React+Django。托管在单独的 S3 存储桶上的静态文件。
我正在尝试使用src="/static/images/logo.png"
.
在开发中它工作得很好,但在生产中它会向XXX.elasticbeanstalk.com/static/images/logo.png
当它应该请求时发送一个请求Bucket.amazonaws.com/static/images/logo.png
。
同时,用户上传的媒体对于 POST 和 GET 请求都非常有效,图像从 Bucket/media/
路径存储和获取。我想避免根据环境有条件地编码绝对 url 路径。
我有一个 djangoproduction_settings.py
文件:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, "..", "www", "static")
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
AWS_STORAGE_BUCKET_NAME = '****************'
AWS_S3_REGION_NAME = '****************'
AWS_ACCESS_KEY_ID = '****************'
AWS_SECRET_ACCESS_KEY = '****************'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'
MEDIAFILES_LOCATION = 'media'
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'
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
谢谢
解决方案
看来您的STATIC_URL
设置不正确。它指的是您的 Web 应用程序项目路径,而不是 S3 存储桶 URL。您可以尝试在下面使用它:
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION)
推荐阅读
- smtp - Plesk 服务器 (Centos) 上的 SMTP 配置
- python - 从 CSV 读取返回 IndexError: list index out of range
- count - Splunk 计算 2 个具有两个不同组的不同字段,而不显示它们
- google-app-maker - AppMaker:动态添加角色给用户
- hp-uft - 在 Chrome 浏览器中执行 UFT 脚本
- css - Bootstrap Carousel 控制大小
- java - 多个相同类型的@Embedded 字段在持久化后始终为空
- python - 从 python 中的汤返回中分离 SRC 属性
- angular - Angular 2 应用程序是否应该部署在 Web 服务器或像 Tomcat 这样的应用程序服务器上?
- python - 无法在python3.6中导入包