-1

我的问题是,每次我将代码部署到 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}/'
4

1 回答 1

0

所以我在工作后想通了。

尽管在其他 django 项目中使用了 DISABLE_COLLECTSTATIC=1 并且运行顺利,但在这种情况下,它变成了问题。当我认为一定是 Heroku 设置造成了问题时,我意识到只有一个设置会干扰静态收集。

从 heroku 中删除设置已解决该问题。现在一切都正确复制了。

于 2020-06-18T14:10:19.923 回答