уменьшенное изображение + проблемы с django в производстве - PullRequest
3 голосов
/ 11 июня 2011

Я использую уменьшенное изображение с Джанго. На моей локальной установке все работает нормально, но в производстве миниатюры не создаются.

Мой код выглядит так:

{% 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 ]

4 голосов
/ 24 октября 2012

Решением для таких ленивых людей, как я, является попытка другого THUMBNAIL_ENGINE в файле настроек.

Я столкнулся с той же проблемой. Поскольку это очевидно является результатом проблем с библиотекой изображений, для моего случая я решил просто использовать другую библиотеку изображений - и это сработало. В настоящее время существует 3 возможных библиотеки изображений: PIL (по умолчанию), Pgmagick и ImageMagick / GraphicsMagick. Подробности объясняются здесь .

Конечно, на сервере должна быть установлена ​​одна из альтернативных библиотек. В противном случае это решение не будет работать.

2 голосов
/ 02 ноября 2011

Краткий ответ: удалить все версии файлов ligjpeg dev, кроме 6.2.Удалите все версии PIL.Установите последние sorl.thumbnail и PIL-1.1.7 в virtualenv, используя pip, чтобы 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

Теперь я удаляюPIL из моего virtualenv

pip uninstall PIL

в версии pip, которую я использую, похоже, есть ошибка - мне нужно удалить вещи из dir virtualenv build, иначе 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

перезапустите веб-сервер.счастье.

2 голосов
/ 18 октября 2011

Вы сделали свой syncdb?

Запустите это, чтобы проверить: python manage.py thumbnail cleanup

1 голос
/ 21 декабря 2011

все перепробовал. Закончилось решением самого себя с новым дистрибутивом Linux. Не будет работать на Ubuntu 10.04, но после этого он отлично работает для меня, 11.04, 11.10 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...