我的问题是,每次我将代码部署到 Heroku 时,在收集静态文件时,模块中的所有静态文件都会再次复制,即使它们没有更改。这意味着我的免费 amazon S3 存储桶复制限制在几次部署后就达到了,因为它每次部署复制 400 个文件。
问题一定出在一些 Heroku 设置上,因为manage.py collectstatic
在我的 IDE 中运行时,即使默认使用 S3 存储桶,它也不会重新复制文件。我DISABLE_COLLECTSTATIC=1
在我的heroku config vars 中有,并在heroku CLI 中设置它以加倍确定。
我不知道它为什么这样做。部署日志中也没有什么有用的。任何帮助,将不胜感激。
这是日志:
Successfully compiled 1 referred SASS/SCSS files.
Debug mode is off.
386 static files copied, 106 unmodified.
106 个未修改的文件是引导程序 SASS 和我自己的一些其他文件。386 个文件是 drom django admin 和 django-countries。尽管没有改变,但它们总是被复制。没有设置交换似乎可以解决问题。
我的 settings.py 的相关部分:
STATICFILES_FINDERS = [
# Default finders
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# finders for sass files
'sass_processor.finders.CssFinder',
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static/'),)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# Settings for AWS bucket
AWS_S3_OBJECT_PARAMETERS = {
'Expires': 'Thu, 31 Dec 2099 20:00:00 GMT',
'CacheControl': 'max-age=94608000',
}
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = 'eu-west-3'
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
AWS_DEFAULT_ACL = 'public-read'
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'
STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{STATICFILES_LOCATION}/'