【发布时间】:2020-09-22 15:12:54
【问题描述】:
设置:React+Django 托管在 Elastic Beanstalk 上。托管在单独的 S3 存储桶上的静态文件。
我正在尝试使用src="/static/images/logo.png" 加载图像。
在开发中它可以完美运行,但在生产中它会向XXX.elasticbeanstalk.com/static/images/logo.png发送请求,而它应该请求Bucket.amazonaws.com/static/images/logo.png。
与此同时,用户上传的媒体对于 POST 和 GET 请求都非常有效,图像会从存储桶 /media/ 路径中存储和获取。
我想避免根据环境有条件地对绝对 url 路径进行编码。
我有一个 django production_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
谢谢
【问题讨论】:
标签: django amazon-web-services amazon-s3 static amazon-elastic-beanstalk