由于 AWS EC2 有点贵,我尝试迁移到 DigitalOcean,但我发现从 DigitalOcean 渲染带有缩略图的页面有点慢,Amazon S3 是文件存储。(从 EC2 运行非常快,我假设 Amazon 内的流量)
症状:
我有以下设置:
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
THUMBNAIL_KVSTORE = values.Value('sorl.thumbnail.kvstores.cached_db_kvstore.KVStore')
Run Code Online (Sandbox Code Playgroud)
我可以看到 sorl-thumbnail 在数据库的 KVStore 中生成缓存值。但在我看来,它仍然会在呈现缩略图之前检查 S3 上的文件是否存在。这与文档相矛盾:
值得注意的是,如果在键值存储中找到缩略图键,则 sorl-thumbnail 不会检查源或缩略图是否存在。
我在 SO 和 google 上搜索过,看到了一些相关的帖子,但他们已经 4 岁了,似乎没有确凿的答案。
经过多次调试,终于搞定了,问题深藏在django-storages里面的s3boto.py
问题:
def url(self, name):
name = self._normalize_name(self._clean_name(name))
if self.custom_domain:
return "%s//%s/%s" % (self.url_protocol,
self.custom_domain, name)
return self.connection.generate_url(self.querystring_expire,
method='GET', bucket=self.bucket.name, key=self._encode_name(name),
query_auth=self.querystring_auth, force_http=not self.secure_urls)
Run Code Online (Sandbox Code Playgroud)
我没有 custom_domain 设置,因此对于每个缩略图,它都试图访问 S3 API 以构建 URL。
定义后AWS_S3_CUSTOM_DOMAIN,AWS_S3_URL_PROTOCOL它的工作速度很快。
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |