首页 > 解决方案 > 尝试使用 AWS S3 将 Django React 应用程序部署到 Heroku 时出现错误的 STATIC_URL

问题描述

我已经为静态文件设置了一个 S3 存储桶。一切都在本地工作,但是当我尝试部署应用程序时,STATIC_URL总是被覆盖,并且它使用同一页面上的静态路径。

生产.py

import os
from dotenv import load_dotenv
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent.parent

# Load dotenv
load_dotenv()

DEBUG = os.getenv('DEBUG_VALUE')
SECRET_KEY = os.getenv("SECRET_KEY")
USE_S3 = os.getenv('USE_S3')
BUCKET_URL = os.getenv('REACT_APP_BUCKET_URL')

# Server is running in production
if DEBUG == 'FALSE':
    # HTTPS settings
    CSRF_COOKIE_HTTPONLY = False
    CSRF_COOKIE_SECURE = True
    SESSION_COOKIE_SECURE = True
    SECURE_SSL_REDIRECT = True

    # HSTS settings
    SECURE_HSTS_SECONDS = 31536000 # 1 year
    SECURE_HSTS_PRELOAD = True
    SECURE_HSTS_INCLUDE_SUBDOMAINS = True


# S3 bucket config
if USE_S3 == 'TRUE':
    MEDIA_URL = '/media/'
    STATIC_URL = BUCKET_URL + '/static/'
    MEDIA_ROOT = BUCKET_URL + '/static/images/'

    AWS_ACCESS_KEY_ID = os.getenv('ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.getenv('SECRET_ACCESS_KEY')
    AWS_STORAGE_BUCKET_NAME = os.getenv('STORAGE_BUCKET_NAME')
    AWS_S3_CUSTOM_DOMAIN = os.getenv('CUSTOM_DOMAIN')

    AWS_LOCATION = 'static'
    #AWS_S3_FILE_OVERWRITE = False
    AWS_DEFAULT_ACL = None

    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
    STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'

else:
    MEDIA_URL = '/media/'
    STATIC_URL = '/static/'
    MEDIA_ROOT = os.path.join(BASE_DIR / 'public' / 'static' / 'images')

标签: djangoamazon-s3herokustatic

解决方案


推荐阅读