django + mod_wsgi + ghostscript - IOError Broken Pipe - PullRequest
0 голосов
/ 07 ноября 2011

Я пытаюсь сгенерировать qr-коды, используя elaphe в представлении django.Это прекрасно работает на сервере разработки, но не работает в производственной среде, работающей на apache2 и mod_wsgi (на той же машине, что и разработка).Похоже, какая-то ошибка в ghostscript.Я предполагаю, что что-то делать со средой пути (gs установлен в /usr/local/bin).

Ошибка

Тип исключения: IOError Значение исключения:
[Errno 32]Разбитая труба

/ usr / local / web / django / www / production / recipemonkey / recipemonkeyapp / views / groceryitem.py в barcodeimg

  • img.save (ответ, PNG)) ...

/ usr / local / web / django / www / production / env / recipemonkey / lib / python2.7 / site-packages / PIL / Image.py в save

  • self.load () ...

/ usr / local / web / django / www / production / env / recipemonkey / lib / python2.7 / site-packages /PIL / EpsImagePlugin.py в загрузке

  • self.im = Ghostscript (self.tile, self.size, self.fp) ...

/ usr / local/web/django/www/production/env/recipemonkey/lib/python2.7/site-packages/PIL/EpsImagePlugin.py в Ghostscript

  • gs.write (s) ...

Код

def barcodeimg (запрос, id):

try:
    i = GroceryItem.objects.get(pk=id)
except GroceryItem.DoesNotExist:
    raise Http404

response=HttpResponse(content_type='image/png')

url="http://%s/recipemonkeyapp/scan/groceryitem/%s" % ('192.168.0.8:8082',i.id)

img=barcode('qrcode',url,options=dict(version=9, eclevel='M'), margin=0, data_mode='8bits')   # Generates PIL.EpsImageFile instance

img=img.resize((90,90)) #both these lines generate IOErrors

img.save(response, 'PNG') #both these lines generate IOErrors

return response

Ответы [ 2 ]

0 голосов
/ 25 января 2012

Исправлено через символическую ссылку.Очевидно, что это была проблема PATH или жестко запрограммированная ссылка на двоичный файл gs.

sudo ln -s /usr/local/bin/gs /usr/bin/gs
0 голосов
/ 08 ноября 2011

Убедитесь, что вы используете абсолютный путь для сохраняемого файла.Текущий рабочий каталог под Apache может быть любым.Также убедитесь, что сохраняемый файл каталога доступен для записи пользователю, код выполняется как в Apache.

...