我有一个工作的Django网站,我一直在使用whitenoise来提供静态文件。 然后,我转而使用静态和媒体的S3存储。它的效果非常好。
我对此设置有一个问题:收集管理静态文件(select2,tinyMCE等)需要很多次,并且在Heroku中经常失败。
所以这是我的理想情景:
那么我该如何实现呢?
以下是我的设置文件中的相关摘录
ENVIRONMENT = os.environ.get('DJANGO_ENVIRONMENT', 'dev')
IS_PROD = ENVIRONMENT == 'production'
IS_DEV = not IS_PROD
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DEBUG = bool(os.environ.get('DJANGO_DEBUG', IS_DEV))
# Static files (CSS, JavaScript, Images) and media
STATIC_URL = '/static/'
STATIC_ROOT = '.static'
if IS_PROD:
AWS_STORAGE_BUCKET_NAME = os.environ.get('S3_BUCKET', '')
AWS_S3_REGION_NAME = os.environ.get('S3_REGION', '')
AWS_ACCESS_KEY_ID = os.environ.get('S3_KEY_ID', '')
AWS_SECRET_ACCESS_KEY = os.environ.get('S3_SECRET', '')
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
AWS_S3_OBJECT_PARAMETERS = {
'Expires': 'Thu, 31 Dec 2100 20:00:00 GMT',
'CacheControl': 'max-age=94608000',
}
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'
MEDIAFILES_LOCATION = 'media'
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{MEDIAFILES_LOCATION}/'
TINYMCE_JS_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/tiny_mce/tiny_mce.js'
else:
MEDIA_URL = '/media/'
MEDIA_ROOT = '.media'
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]