【问题标题】:How do I use Django, sorl-thumbnail, memcached, and S3 together?如何一起使用 Django、sorl-thumbnail、memcached 和 S3?
【发布时间】:2012-10-02 00:39:41
【问题描述】:

我有一个项目,我需要开始为用户上传的图像创建动态调整大小的缩略图,而之前我一直在生成一些特定大小的缩略图。我有一个现有模型,它代表一个看起来像这样的图像:

class Image(models.Model):
  original = models.URLField()
  small = models.URLField()
  medium = models.URLField()
  large = models.URLField()

其中每一个都填写了指向 S3 上相应图像的 URL。在上传时,所有版本都被创建(实际上是在不久之后,通过计划任务),存储在 S3 中,然后在模型上设置。展望未来,我们的设计需要为每个缩略图提供许多不同的大小,因此将它们全部存储在数据库中是不切实际的。我想保留original 并在模板中即时完成其余的工作。

所以这就是我来到sorl-thumbnail 的地方。它似乎打算做我想做的事,但我有点迷失它应该如何工作(目前还没有)。作为一项测试,我制作了一个基本视图/模板,其中列出了一些图像并尝试对其进行缩略图,就像教程一样:

{% for img in image_set %}
  {% thumbnail img.original "180x180" crop="center" format="PNG" as im %}
  <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
  {% endthumbnail %}
{% endfor %}

最终会为文件生成一个 URL,例如 cache/84/8f/848fb078f2e8d35aecd92150c6fa6843.png(即 404s)。我不确定我是否了解该文件应该存储在哪里。我假设它正在拉入 S3 文件,然后在 somewhere 创建缩略图,但我不清楚它在哪里,以及我应该从哪里提供它。这一切现在都在本地开发服务器上,使用 memcached(我可以看到正在设置缓存条目)。 PIL 安装在我的环境中,支持 jpeg/png。

【问题讨论】:

  • 这给出了它如何工作的示意图 docs.google.com/drawings/…。您的缩略图正在存储在 memcached 中,对吗?所以某处是memcached。如果您无法访问缓存,那是另一个问题。
  • 呃,嗯,是的,我想这可能是问题所在。如何访问 memcached 中的文件?它在 127.0.0.1:11211 本地运行。
  • 远程登录本地主机 11211;得到 ;更多命令 - code.google.com/p/memcached/wiki/NewCommands#stats
  • 对不起,我的意思是在浏览器中。我不明白我需要如何从 memcached 中取出文件来为它们提供服务。

标签: django amazon-s3 memcached sorl-thumbnail


【解决方案1】:

您可能想查看Django-storages,这是一个很好的AWS S3,可以为您解决问题。此外,还安装boto,因为django-storage 依赖于boto。

然后您必须将以下内容添加到您的 settings.py 中

import os

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = '<YOUR BUCKET NAME>'

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

STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

然后您的缓存将存储在 AWS S3 本身上。

希望对你有帮助

注意:出于安全原因,最好将您的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 添加为环境变量,而不是直接将它们写在 setting.py 中。

【讨论】:

  • 非常感谢,这行得通。这是我需要的DEFAULT_FILE_STORAGE 设置。我有一种感觉,我把所有的部分都放在了那里,只是没有把它们正确地组合在一起。
  • 很确定 STATICFILES_STORAGE、STATIC_URL 和 ADMIN_MEDIA_PREFIX 与这个问题无关?我相信排序缩略图仅在 DEFAULT_FILE_STORAGE 上运行。
猜你喜欢
  • 2016-05-09
  • 2014-10-14
  • 2012-06-21
  • 2013-01-30
  • 2012-11-22
  • 2011-09-26
  • 2011-07-30
  • 2012-09-05
  • 2015-12-06
相关资源
最近更新 更多