1

わかりました。Bluehostの共有サーバーでこの問題に疲れ果てており、アイデアを見つけることができませんでした。


アプリをアップロードしましたが、使用している写真アップローダー(サイトのコア)を除いて、すべてが正常に機能しているようです。stdimage2 Djangoアプリ(stdimageのフォーク)を使用していますが、開発サーバー(Ubuntu 10.04)で正常に動作しました。しかし、それは現在大きな問題を抱えており、私は私が見逃しているものの可能なアイデアやインクリングを探しています。

印刷されるエラーは次のとおりです(これは、アップローダーによって4つの画像が別々のリクエストとして次々に送信される場合です)。

[Wed Dec 21 09:47:03 2011] [warn] [client 128.187.97.6] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://gallery.fernstenfamily.com/backend/upload/1/
[Wed Dec 21 09:47:03 2011] [error] [client 128.187.97.6] Premature end of script headers: mySite.fcgi, referer: http://gallery.fernstenfamily.com/backend/upload/1/
[Wed Dec 21 09:47:03 2011] [warn] RewriteCond: NoCase option for non-regex pattern '-f' is not supported and will be ignored.
[Wed Dec 21 09:47:03 2011] [warn] [client 128.187.97.6] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://gallery.fernstenfamily.com/backend/upload/1/
[Wed Dec 21 09:47:03 2011] [error] [client 128.187.97.6] Premature end of script headers: mySite.fcgi, referer: http://gallery.fernstenfamily.com/backend/upload/1/
[Wed Dec 21 09:47:04 2011] [warn] [client 128.187.97.6] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://gallery.fernstenfamily.com/backend/upload/1/
[Wed Dec 21 09:47:04 2011] [error] [client 128.187.97.6] Premature end of script headers: mySite.fcgi, referer: http://gallery.fernstenfamily.com/backend/upload/1/
[Wed Dec 21 09:47:05 2011] [error] mod_fcgid: process /home3/fernsten/public_html/ffamily/gallery/mySite.fcgi(22492) exit(communication error), get unexpected signal 11

これは私のfcgiファイルがどのように見えるかです:

#!/home3/fernsten/local/Python-2.7/bin/python
import sys, os
print "sys.path is ", sys.path

#add a custom Python path and pray it works dddd
sys.path.insert(0, "/home3/fernsten/local/lib/python2.7/site-packages")
sys.path.insert(0, "/home3/fernsten/local/lib/python2.7")
sys.path.insert(0, "/home3/fernsten/local/lib/python2.7/site-packages/flup-1.0.2-py2.7.egg")
sys.path.insert(0, "/home3/fernsten/django_projects")
sys.path.insert(0, "/home3/fernsten/django_projects/gallery")
sys.path.insert(0, "/home3/fernsten/local/lib/python2.7/site-packages/MySQL_python-1.2.3-   py2.7-linux-x86_64.egg")

os.chdir("/home3/fernsten/django_projects/gallery")

os.environ['DJANGO_SETTINGS_MODULE'] = "gallery.settings"

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

そして最後に、それが死ぬ関数は次のとおりです。

if request.method == 'POST':
    result = []
    newform = Photo()
    newform.image= request.FILES.get('file')
    newform.album=Album.objects.get(pk=album_pk)
    newform.save()
    result.append({"name":"Uploaded image",
                    "size":newform.image.size,
                    "url":MEDIA_URL + newform.image.url,
                    "thumbnail_url": newform.image.url.replace(".",".thumbnail."),
                    "delete_url":'/backend/delete_img/' + str(newform.pk)+'/',
                    "delete_type":"POST",
                    })
    response_data = simplejson.dumps(result)
    return HttpResponse(response_data, mimetype='application/json')
return render_to_response('backend/upload_images.html',{'album_pk':album_pk},context_instance=RequestContext(request))

newform.save()を実行すると、アップロードされた画像の名前の変更やサムネイルの作成と命名など、stdimage2がバックグラウンドで処理を実行するため、この領域で発生していると確信しています。画像の名前が変更されていますが、サムネイルは生成されていません。

何が悪いのかについて多くを見つけることができなかったので、どんなアイデアも素晴らしいでしょう。


アップデート

また、Djangoの管理インターフェースを使用して画像をアップロードすることもできません。画像をアップロードすることはできますが、その時点で壊れます。StdImage2は、モデル定義に従ってアップロードされた画像名を変更しますが、サムネイルは作成しません。データベースには、生成された画像ではなく、アップロードされた画像名で画像へのURLが保存されます。

すべてのベースをカバーするために、サーバーからファイルをコピーして、問題なくローカルで実行しました。これは、より多くの混乱と欲求不満を引き起こしただけです。


更新2

Djangoシェルを使用してそのように試した後(少なくとも、正しく実行したことを願って、次のエラーが発生します:

image = Image.open('/home3/fernsten/www/ffamily/media/media/albums/1/image_1.jpeg')
>>> newform.image = image
>>> newform.album = Album.objects.get(pk=1)
>>> newform.save()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home3/fernsten/local/lib/python2.7/site-packages/django/db/models/base.py", line 460, in save self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/home3/fernsten/local/lib/python2.7/site-packages/django/db/models/base.py", line 543, in save_base for f in meta.local_fields if not isinstance(f, AutoField)]
File "/home3/fernsten/local/lib/python2.7/site-packages/django/db/models/fields/files.py", line 253, in pre_save
if file and not file._committed:
File "/home3/fernsten/local/lib/python2.7/site-packages/PIL/Image.py", line 512, in   __getattr__
raise AttributeError(name)
AttributeError: _committed
4

1 に答える 1

2

エラーログの最後の行によると、どこかでセグメンテーション違反が発生しているようです。これは Python コードでは発生しないはずなので、stdimage2 のコードを調べて、他に何が含まれているかを確認することから始めます。

ソースをざっと見てみると、これもすべて Python であり、依存している外部ライブラリは PIL だけであることがわかります。PILはCライブラリ(少なくともその一部)であるため、特にフィールドの名前が変更されているが、サイズ変更された画像が作成されていない場合、エラーが発生している可能性があります。

PIL はどのようにサーバーにインストールされましたか? パッケージマネージャーを介してインストールされた場合、またはサーバー自体でコンパイルされた場合は、更新または再コンパイルが必要になる場合があります。モジュールを開発マシンからコピーした場合、競合が発生する可能性があります (異なるライブラリ、異なるプロセッサ アーキテクチャなど)。

これをトラブルシューティングするもう 1 つの方法は、Web インターフェイスではなく、Python シェルを使用することです。モデルをロードして、失敗しているように見える save() をトリガーしてみてください。シェルがセグメンテーション違反で終了した場合は、再試行しますが、今回はデバッガーを使用してシングル ステップで実行します。(実際には、StdImageField._resize_image に pdb ブレークポイントを設定し、そのブレークポイントに到達するまでコードを実行します。)

これをデバッグする簡単な方法はないと思います。あなたのコードにはそれを引き起こす明らかなものは何もないように見えるので、サーバー自体に何かがあるように見えます。

于 2011-12-21T20:55:31.163 に答える