3

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

4 に答える 4

4

私のような怠惰な人々のための解決策は、設定ファイルで別のTHUMBNAIL_ENGINEを試すことです。

私は同じ問題に直面していました。それは明らかに画像ライブラリの問題に起因するので、私の場合、私は単に別の画像ライブラリを使用することにしました-そしてそれはうまくいきました。現在、3つの可能な画像ライブラリがあります:PIL(デフォルト)、Pgmagick、およびImageMagick/GraphicsMagick。詳細はこちらで説明しています。

もちろん、代替ライブラリの1つをサーバーにインストールする必要があります。それ以外の場合、このソリューションは機能しません。

于 2012-10-24T09:30:03.637 に答える
2

syncdbを実行しましたか?

これを実行して確認します:pythonmanage.pyサムネイルのクリーンアップ

于 2011-10-18T17:22:06.610 に答える
2

簡単な答え:ligjpeg6.2を除くすべてのバージョンの開発ファイルをアンインストールします。のすべてのバージョンをアンインストールしますPILsorl.thumbnailを使用して、最近のを PIL-1.1.7virtualenvにインストールし、pipに対してPILコンパイルしlibjpeg6.2ます。

詳細な回答:

私が管理しているサイトでこれに多くの問題が発生しました。これは、バージョン間の競合が原因でした。また、PIL誰かがそれらすべてのバージョンを多数インストールしていました。私はそれを1回のインストールに分解する必要がありました、そしてlibjpegsorlPIL1.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ビルドディレクトリにあるものを削除する必要があります。そうしないと、pipはそれ以降のバージョンをインストールしません

rm -rf /path/to/virtualenv/build/PIL/

今、私は私が望まないlibjpegのバージョンを削除する必要があります...あなたはおそらくするべきです

apt-get remove libjpeg8 libjpeg8-dev

...または必要な呪文。もちろん、そのバージョンに依存する他のものがあるlibjpeg場合は、興味深い状況にあります。PILの特定のバージョンに対してインストールおよびビルドできると確信していますlibjpeg。そうすれば、これで問題なく動作するようになるかもしれませlibjpeg8ん。もしそうなら、返信してください。

サーバーのトレインレックでは、両方のファイルlibjpeg7libjpeg8devファイルがソースからインストールされていたため(パッケージマネージャーがインストールされたバージョン6.2に加えて-陽気なえ?)、両方のソースをダウンロードしlibjpeg7libjpeg8実行してから実行する必要が./configureありました./make uninstall。まだいくつかのライブラリが残っていた/usr/local/lib/ので、やらなければなりませんrm /usr/local/lib/libjpeg*でした。

私はおそらくその最後のビットをやるべきだったが、徹底したかった。

PILシステム上またはシステム上に他のインストールまたはインストールの残りがないことを確認しlibjpegます。

今、あなたは新たに始めることができます...

yum install libjpeg-devel 

で最もよく動作するように見えるバージョン6.2を取得するこのボロボロの古いCentOSボックスPIL1.1.7。最近のDebian/Ubuntuでは、実行する必要があります

apt-get install libjpeg62-dev

今私のvirtualenvで実行します

pip install PIL sorl-thumbnail

Webサーバーを再起動します。幸せ。

于 2011-11-01T20:03:59.777 に答える
1

すべてを試しました。結局、新しいLinuxディストリビューションで解決しました。Ubuntu 10.04では動作しませんが、その後は、11.04、11.10などで正常に動作します。

于 2011-12-21T02:09:49.277 に答える