我将我的静态文件存储在Amazon S3上,并且我使用Django的缓存清理,我的存储类看起来像这样:
class MyStaticFilesStorage(ManifestFilesMixin, S3BotoStorage):
...
请参阅: https://docs.djangoproject.com/en/1.8/ref/contrib/staticfiles/#manifeststaticfilesstorage
运行manage.py collectstatic
后,所有静态文件都上传到S3,并在文件名中使用缓存清除哈希值。
一切都很好,但我无法理解。
static
文件夹位于.gitignore
,因此静态文件永远不会到达我的服务器。staticfiles.json
仅存储在S3上,所以我去了那里并将其删除(所以我可以看看它是否有任何效果)。staticfiles.json
的文件,并且没有静态文件在服务器上。但是,Django仍然在服务器上生成具有正确哈希的正确静态URL(例如:main.c076b26cc1a7.css)。
如何? django如何在没有映射(staticfiles.json)且没有原始文件的情况下知道哈希值?
答案 0 :(得分:1)
我猜测Django首先从S3获取 staticfiles.json 文件,然后从文件中读取映射。
即使您的静态文件夹位于 .gitignore ,当您运行manage.py collectstatic
时,您告诉Django查看静态文件夹,因此它知道它必须从那里。不要忘记您没有使用git pull
上传静态文件夹中的内容,而是使用manage.py collectsatic
进行上传。