【发布时间】:2011-09-12 19:56:02
【问题描述】:
我在 Django 中使用 sorl 缩略图。在我的本地设置上它工作正常,但在生产中没有制作缩略图。
我的代码如下所示:
{% load thumbnail %}
{% thumbnail up.image "32x32" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% empty %}
<img src="{{ MEDIA_URL }}/images/missing_small.png" alt="" title="" />
{% endthumbnail %}
我启用了日志记录,跟踪如下所示:
Traceback (most recent call last):
[...]
File "/usr/local/lib/python2.6/dist-packages/PIL/ImageFile.py", line
215, in load
raise_ioerror(e)
File "/usr/local/lib/python2.6/dist-packages/PIL/ImageFile.py", line
52, in raise_ioerror
raise IOError(message + " when reading image file")
IOError: broken data stream when reading image file
该错误不是很有帮助,因为该文件存在并且所有人都可以读取。我不确定如何获得更明确的错误,或者尝试修复什么。
然后更令人困惑的是它使用manage.py shell 工作的事实
In [1]: from sorl.thumbnail import get_thumbnail
In [2]: im = get_thumbnail('/myproject/static/images/user_profiles/1/11-20-2010-2_5.jpg',
'32x32', crop='center' )
In [3]: im
Out[3]: <sorl.thumbnail.images.ImageFile object at 0x29fe090>
In [4]: im.url
Out[4]: 'http://example.com/cache/ff/31/ff318b4a995ff345d1d48e79b67ec62b.jpg'
它制作了缩略图,只是不会通过模板代码制作一个。
有人吗?
【问题讨论】:
-
对我来说这听起来仍然像是一个权限问题。 Django over HTTP 将在网络服务器的用户和组下运行,而我很确定 shell 管理命令在您的用户和组下运行。确保网络服务器的用户和/或组可以读取该文件的整个路径以及文件本身。
-
这似乎不是权限问题。我的网络服务器作为用户 www-data 运行。我已经递归地将我的整个应用程序目录分配给该用户和组。通往缓存目录(包括缓存目录)的每条路径都是世界可写的。同样的问题仍然存在。
标签: django permissions sorl-thumbnail