Django:使用来自S3

时间:2018-04-08 21:14:52

标签: django amazon-s3

我有一个工作的Django网站,我一直在使用whitenoise来提供静态文件。 然后,我转而使用静态和媒体的S3存储。它的效果非常好。

我对此设置有一个问题:收集管理静态文件(select2,tinyMCE等)需要很多次,并且在Heroku中经常失败。

所以这是我的理想情景:

  • 保持一切顺利但是
  • 请勿将管理静态文件上传到S3(在收集期间)并使用whitenoise从应用服务器提供

那么我该如何实现呢?

以下是我的设置文件中的相关摘录

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',
]

0 个答案:

没有答案