Yuj*_*ita 11 django amazon-s3 django-staticfiles
我正在使用django staticfiles + django- storages 和Amazon S3来托管我的数据.一切正常,但每次运行manage.py collectstatic命令时都会将所有文件上传到服务器.
看起来管理命令比较Storage.modified_time()了django-storages在S3存储中未实现的时间戳.
你们如何确定S3文件是否被修改过?
我可以在我的数据库中存储文件路径和最后修改的数据.或者有一种简单的方法从亚马逊拉出最后修改过的数据?
另一个选择:看起来我可以分配任意元数据python-boto,我可以在第一次上传时放置本地修改日期.
无论如何,这似乎是一个常见问题,所以我想问一下其他人使用过什么解决方案.谢谢!
Yuj*_*ita 11
最新版本的django-storages(1.1.3)通过S3 Boto处理文件修改检测.
pip install django-storages 你现在好了:)得开心吧!
更新:如果使用S3Boto类AWS_PRELOAD_METADATA,请True在设置文件中将选项设置为非常快速的同步.如果使用他的S3,请使用他的PreloadedS3类.
更新2:运行命令仍然非常慢.
更新3:我分叉了django-storages存储库来修复问题并添加了一个pull请求.
问题在于modified_time即使没有使用后备值也会被调用的方法.我将回退移动到一个if块,只有在get返回时才执行None
entry = self.entries.get(name, self.bucket.get_key(self._encode_name(name)))
Run Code Online (Sandbox Code Playgroud)
应该
entry = self.entries.get(name)
if entry is None:
entry = self.bucket.get_key(self._encode_name(name))
Run Code Online (Sandbox Code Playgroud)
现在,性能差异来自100秒的1000个请求的<.5s
对于同步10k +文件,我相信boto必须发出多个请求,因为S3分页结果导致5-10秒的同步时间.随着我们获得更多文件,这只会变得更糟.
我想解决方案是有一个自定义管理命令或django-storages更新,其中文件存储在S3上,其中包含所有其他文件的元数据,只要通过collectstatic命令更新文件,就会更新该文件.
它不会检测通过其他方式上传的文件,但如果唯一的入口点是管理命令则无关紧要.
| 归档时间: |
|
| 查看次数: |
5472 次 |
| 最近记录: |