Django-wkhtmltopdf вернул ненулевой статус выхода 1 - PullRequest
0 голосов
/ 09 мая 2018

Я получаю следующую ошибку, используя wkhtmltopdf в проекте Django в разработке. Если я пытаюсь запустить его на сервере Apache, возвращается код состояния 6, а не 1.

Команда '[' wkhtmltopdf ',' --disable-javascript ',' --encoding ', u'utf8 ',' --quiet ', u'False', '/tmp/wkhtmltopdfnUwu3t.html', '-'] ' возвращен ненулевой статус выхода 1

Это мой взгляд.

class MyPDF(OrgOwnerMixin, PDFTemplateView):
    filename = 'my_pdf.pdf'
    template_name = 'pdf/test.html'

    def get_object(self, *args, **kwargs):
        return Organisation.objects.get(slug=self.kwargs['slug'])

    def get_context_data(self, *args, **kwargs):
        ctx = super(MyPDF, self).get_context_data(*args, **kwargs)
        ctx['object'] = self.get_object()
        return ctx

А вот и Traceback:

Traceback:

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  217.                 response = self.process_exception_by_middleware(e, request)

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  215.                 response = response.render()

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/django/template/response.py" in render
  107.             self.content = self.rendered_content

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/wkhtmltopdf/views.py" in rendered_content
  78.             cmd_options=cmd_options

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py" in render_pdf_from_template
  186.                           cmd_options=cmd_options)

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py" in convert_to_pdf
  124.     return wkhtmltopdf(pages=filename, **cmd_options)

File "/home/henry/Documents/Sites/Development/fargus/env/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py" in wkhtmltopdf
  110.     return check_output(ck_args, **ck_kwargs)

File "/usr/lib/python2.7/subprocess.py" in check_output
  574.         raise CalledProcessError(retcode, cmd, output=output)

Exception Type: CalledProcessError at /pdf/org-1/
Exception Value: Command '['wkhtmltopdf', '--disable-javascript', '--encoding', u'utf8', '--quiet', u'False', '/tmp/wkhtmltopdfEG5K8j.html', '-']' returned non-zero exit status 1

Любая помощь будет высоко ценится

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Выполнить команду wkhtmltopdf --disable-javascript --encoding utf8 --quiet False /tmp/wkhtmltopdfEG5K8j.html -

И посмотрите, какую ошибку вы получите.

0 голосов
/ 09 мая 2018

При просмотре PDFTemplateView я подозреваю, что вы используете django-wkhtmltopdf .

Посмотрите на Exception Value вашего следа:

Exception Value: Command '['wkhtmltopdf', '--disable-javascript', '--encoding', u'utf8', '--quiet', u'False', '/tmp/wkhtmltopdfEG5K8j.html', '-']' returned non-zero exit status 1

Я вижу подозрительный параметр False здесь: --quiet False /tmp/wkhtmltopdfEG5K8j.html

Однако я только что сделал новую установку (последние Django 2.x и django-wkhtmltopdf==3.1.0), и я не смог воспроизвести вашу проблему. НО Я заметил одну вещь: вы наследуете MyPDF класс от OrgOwnerMixin, который вы забыли опубликовать здесь.

Я подозреваю, что либо в OrgOwnerMixin ИЛИ в любом классе, который OrgOwnerMixin наследует (если есть), вы добавили что-то вроде:

class OrgOwnerMixin:
    cmd_options = {'quiet': False}

Это приводит к тому, что False передается в качестве аргумента для флага --quiet в командной строке, и, как следствие, - вызывает ваше исключение.

Если вы хотите отключить флаг --quiet, вам нужно сделать:

cmd_options = {'quiet': None}

Хотя я не вижу этого в документации, я ясно вижу в коде, что только если вы передадите None в качестве значения параметров, оно будет удалено из командной строки. Вы можете проверить это, посмотрев на функцию wkhtmltopdf.utils._options_to_args.

...