(1.1.3)的最新版本django-storages
通过 S3 Boto 处理文件修改检测。
pip install django-storages
你现在很好了 :) 一定要喜欢开源!
更新:如果使用 S3Boto 类,请在设置文件中设置AWS_PRELOAD_METADATA
选项以实现非常快速的同步。True
如果使用他的 S3,请使用他的 PreloadedS3 类。
更新 2:运行命令仍然非常慢。
更新 3:我分叉了 django-storages 存储库来解决问题并添加了一个拉取请求。
问题出在modified_time
调用回退值的方法中,即使它没有被使用。我将后备移动到一个if
块以仅在get
返回时执行None
entry = self.entries.get(name, self.bucket.get_key(self._encode_name(name)))
应该
entry = self.entries.get(name)
if entry is None:
entry = self.bucket.get_key(self._encode_name(name))
现在,性能差异是从 100 秒到 1000 次请求的 <.5 秒
更新 4:
对于同步 10k+ 个文件,我相信 boto 必须发出多个请求,因为 S3 对结果进行分页会导致 5-10 秒的同步时间。随着我们获得更多文件,这只会变得更糟。
我在想一个解决方案是使用自定义管理命令或django-storages
更新存储在 S3 上的文件的位置,该文件具有所有其他文件的元数据,只要通过collectstatic
命令更新文件就会更新。
它不会检测通过其他方式上传的文件,但如果唯一的入口点是管理命令则无关紧要。