【问题标题】:Sorl-thumbnail + DigitalOcean + Amazon S3 slownessSorl-thumbnail + DigitalOcean + Amazon S3 缓慢
【发布时间】:2015-12-06 09:55:27
【问题描述】:

由于 AWS EC2 有点贵,我尝试迁移到 DigitalOcean,但我发现使用 Amazon S3 作为文件存储的 DigitalOcean 渲染带有缩略图的页面有点慢。 (从 EC2 运行非常快,我假设亚马逊内部的流量)

症状:

  1. 由于缩略图创建,初始加载非常缓慢
  2. 后续加载也很慢,但没有初始加载那么慢

我有以下设置:

STATICFILES_STORAGE = DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

THUMBNAIL_KVSTORE = values.Value('sorl.thumbnail.kvstores.cached_db_kvstore.KVStore')

我可以看到 sorl-thumbnail 在数据库的 KVStore 中生成缓存值。但在我看来,它仍然会在渲染缩略图之前检查 S3 上的文件是否存在。这与documentation 相矛盾:

值得注意的是,如果在键值存储中找到缩略图键,sorl-thumbnail 不会检查源或缩略图是否存在。

我在 SO 和 google 上搜索过,看到了一些相关的帖子,但它们都 4 岁了,似乎没有确凿的答案。

【问题讨论】:

    标签: sorl-thumbnail


    【解决方案1】:

    经过多次调试,我终于搞定了,问题深埋在 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) 
    

    我没有 custom_domain 设置,因此对于每个缩略图,它都试图访问 S3 API 以构建 URL。

    定义AWS_S3_CUSTOM_DOMAINAWS_S3_URL_PROTOCOL 后,它的工作速度很快。

    【讨论】:

    • 看起来他们解决了这个问题,现在 url 生成速度很快,无需访问 S3。但我遇到了同样的问题 - 迁移到 S3 后,django 模板变得非常慢。即使是预生成的缩略图。
    • 这个答案对我来说是救命稻草。我定义了 AWS_S3_CUSTOM_DOMAIN,但是在自定义存储类中使用“custom_domain = False”意外覆盖了它。此后速度提高了十倍...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-30
    • 2023-04-08
    • 2014-10-14
    • 2012-10-02
    • 2016-05-09
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多