Ошибки Django и fcgi и mod_fcgid - PullRequest
       44

Ошибки Django и fcgi и mod_fcgid

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

Хорошо, я исчерпал эту проблему на своем общем сервере в Bluehost, и я не смог найти никаких идей.


Я загрузил свое приложение, и все, кажется, работает нормально, за исключением одной вещи, которую я использую для загрузки фотографий (которая является ядром сайта). Я использую приложение stdimage2 Django (форк stdimage), и оно отлично работало на сервере разработки (Ubuntu 10.04). Но сейчас у него серьезные проблемы, и я ищу любые возможные идеи или предположения о вещах, которые мне не хватает.

Вот ошибки, которые печатаются (это с четырьмя картинками, отправляемыми загрузчиком как отдельные запросы один за другим):

[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 делает вещи в фоновом режиме, такие как переименование загруженного изображения и создание и присвоение имени миниатюре. Изображение переименовывается, но миниатюра не создается.

Любые идеи были бы потрясающими, так как я не смог найти много о том, что может быть не так.


UPDATE

Я также не могу загрузить изображение с помощью интерфейса администратора в 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

1 Ответ

2 голосов
/ 22 декабря 2011

Кажется, что где-то произошла ошибка сегментации - в соответствии с последней строкой в ​​вашем журнале ошибок.Этого не должно происходить с кодом Python, поэтому я бы начал с просмотра кода stdimage2, чтобы увидеть, что там еще есть.

Краткое ознакомление с источником предполагает, что все это также Python, иединственная внешняя библиотека, от которой она зависит, это PIL.PIL - это библиотека C (по крайней мере, ее часть), поэтому, возможно, именно здесь происходит ошибка, особенно если, как вы говорите, поля переименованы, но изображения с измененным размером не создаются.

Как был установлен PIL на сервере?Если он был установлен через менеджер пакетов или скомпилирован прямо на самом сервере, то может потребоваться его обновить или перекомпилировать.Если вы скопировали модуль со своего компьютера разработчика, то там может возникнуть конфликт (разные библиотеки, разная архитектура процессора и т. Д.)

Другой способ устранения неполадок - это скорее из оболочки pythonчем через веб-интерфейс.Попробуйте загрузить модель и активировать функцию save (), которая, похоже, не работает.Если оболочка завершается с ошибкой сегментации, попробуйте снова, но на этот раз пошагово с отладчиком.(Я бы на самом деле установил точку останова pdb на StdImageField._resize_image и запускал код до тех пор, пока он не достигнет этой точки останова.)

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

...