生产中的sorl thumbnail + django问题

时间:2011-06-10 21:38:56

标签: django permissions sorl-thumbnail

我正在使用与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'

它制作了缩略图,只是不会通过模板代码制作缩略图。

任何?

4 个答案:

答案 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.7pip安装到virtualenv中,以便PIL针对libjpeg6.2进行编译。

详细答案:

我在一个网站上遇到了很多麻烦 - 转变是由于PILlibjpegsorl之间的版本冲突 - 有人安装了很多版本的他们都是。我不得不将其删除为PIL1.1.7libjpeg6.2sorl.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

卸载PIL
pip 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正常工作 - 如果你这样做,请回复。

在我的服务器的火车残骸上,从源代码安装了libjpeg7libjpeg8 dev文件(除了软件包管理器安装版本6.2 - 搞笑呃?)所以我不得不下载源代码对于libjpeg7libjpeg8,请运行./configure然后./make uninstall/usr/local/lib/还剩下一些图书馆,所以我必须rm /usr/local/lib/libjpeg*

我可能刚刚完成了最后一点,但希望彻底。

检查系统上是否存在PILlibjpeg的其他安装或剩余安装。

现在你可以重新开始...

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等。