我正在使用与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'
它制作了缩略图,只是不会通过模板代码制作缩略图。
任何?
答案 0 :(得分:4)
像我这样懒惰的人的解决方案是在设置文件中尝试另一个THUMBNAIL_ENGINE。
我遇到了同样的问题。因为它显然是由图像库的问题引起的,对于我的情况,我决定只使用不同的图像库 - 而且它有效。目前有3种可能的图像库:PIL(默认),Pgmagick和ImageMagick / GraphicsMagick。细节解释为here。
当然,必须在服务器上安装其中一个备用库。其他,这个解决方案不起作用。
答案 1 :(得分:2)
你完成了syncdb吗?
运行此命令以检查:python manage.py thumbnail cleanup
答案 2 :(得分:2)
简短回答:卸载除{6.2之外的ligjpeg
dev文件的所有版本。卸载PIL
的所有版本。使用sorl.thumbnail
将最近的PIL-1.1.7
和pip
安装到virtualenv中,以便PIL
针对libjpeg6.2
进行编译。
详细答案:
我在一个网站上遇到了很多麻烦 - 转变是由于PIL
,libjpeg
和sorl
之间的版本冲突 - 有人安装了很多版本的他们都是。我不得不将其删除为PIL1.1.7
,libjpeg6.2
和sorl.thumbnail 11.9
这就是我必须做的事情(这假设你使用的是virtualenv。如果你不是,那么现在是开始的好时机):
yum erase python-imaging
等等,它也是通过easy_install安装的,所以我还必须从站点包中删除PIL:
easy_install -mxN PIL
rm -rf /usr/lib/python2.6/site-packages/PIL /usr/lib/python2.6/site-packages/PIL.pth
现在我从virtualenv
卸载PILpip uninstall PIL
我正在使用的pip版本中似乎存在一个错误 - 我必须删除virtualenv build dir中的内容或pip不会安装更高版本
rm -rf /path/to/virtualenv/build/PIL/
现在我必须删除我不想要的libjpeg版本......你应该这样做
apt-get remove libjpeg8 libjpeg8-dev
......或者其他任何咒语都是必要的。当然,如果你有其他依赖于libjpeg
版本的东西那么你就处于一个有趣的境地。我确信您可以PIL
安装和构建特定版本的libjpeg
。那么也许你可以让libjpeg8
正常工作 - 如果你这样做,请回复。
在我的服务器的火车残骸上,从源代码安装了libjpeg7
和libjpeg8
dev文件(除了软件包管理器安装版本6.2 - 搞笑呃?)所以我不得不下载源代码对于libjpeg7
和libjpeg8
,请运行./configure
然后./make uninstall
。 /usr/local/lib/
还剩下一些图书馆,所以我必须rm /usr/local/lib/libjpeg*
。
我可能刚刚完成了最后一点,但希望彻底。
检查系统上是否存在PIL
或libjpeg
的其他安装或剩余安装。
现在你可以重新开始...
yum install libjpeg-devel
在这个受到重创的旧版CentOS机器上获得版本6.2,这似乎最适合PIL1.1.7
。在最近的Debian / Ubuntu上你必须运行
apt-get install libjpeg62-dev
现在在我的virtualenv运行中
pip install PIL sorl-thumbnail
重新启动网络服务器。幸福。
答案 3 :(得分:1)
尝试了一切。结束了使用更新的Linux发行版解决自己的问题。不适用于Ubuntu 10.04,但之后它对我来说很好,11.04,11.10等。