我尝试将应用升级到Django 1.11,但遇到collectstatic
的问题。
旧版本:
django 1.8.17
django-storages 1.5.1
新版本:
django 1.11.12
django-storages 1.6.6
存储
class StaticS3BotoStorage(ManifestFilesMixin, S3BotoStorage):
location = 'static'
file_overwrite = True
preload_metadata = True
或
class StaticS3BotoStorage(CachedFilesMixin, S3BotoStorage):
location = 'static'
file_overwrite = True
preload_metadata = True
对于旧版本,collectstatic
工作正常,包括collectstatic --clear
。
升级后,collectstatic --clear
失败(没有文件被删除)。
collectstatic
会复制文件,但有时会创建同一文件的两个版本。在此特定示例中,我得到base.hash1.css
和base.hash2.css
。 base.hash2.css
为空,因此页面打开,但无法正确呈现。
如果我不使用CachedFilesMixin
或ManifestFilesMixin
,collectstatic
工作正常,但明确仍然失败。
我测试了django 1.11和django-storage的不同组合,但它们似乎都表现得一样。
其他人是否遇到类似问题?
答案 0 :(得分:4)
我们遇到了同样的问题。
我认为潜在的问题有多个问题/来源:
我们通过像这样覆盖S3BotoStorage来解决空文件问题:
class PatchedS3StaticStorage(S3BotoStorage):
def _save(self, name, content):
if hasattr(content, 'seek') and hasattr(content, 'seekable') and content.seekable():
content.seek(0)
return super()._save(name, content)
简而言之,我们在保存文件之前先查找文件的开头。