Wkhtmltopdf (pdfkit) - QXcbConnection:无法连接显示
Wkhtmltopdf (pdfkit) - QXcbConnection: Could not connect to display
我正在开发一个 Django 项目,我们从 HTML 模板生成 PDF 文件。我使用 django-pdfkit
来呈现 PDF。
在我的 Ubuntu 16.04
上一切正常,但是当我在 DigitalOcean Ubuntu 16.04 服务器上部署项目时,它会引发错误:
IOError at /render/doklad/ wkhtmltopdf exited with non-zero code -6.
error:
QXcbConnection: Could not connect to display
我尝试安装
sudo apt-get install libxrender1 fontconfig xvfb
将 WKHTMLTOPDF_BIN
变量设置为正确的路径。
已将 gunicorn
用户更改为 root。
pip install wkhtmltopdf
没有任何帮助,你知道我能做些什么来解决这个问题吗?
编辑:
我发现如果我以 root 身份执行此命令,它会正常工作:
wkhtmltopdf http://www.google.com google.pdf
但问题是如果我 运行 使用 django
用户的命令。它returns同样的东西:
QXcbConnection: Could not connect to display
Aborted (core dumped)
所以我尝试更改 gunicorn.service
,使 gunicorn 运行ning 在 root
而不是 django
下,但它没有帮助。
http://mypage/render/doklad/?id=1
returns同样的错误。
此文件中似乎出现了错误:
https://github.com/JazzCore/python-pdfkit/blob/master/pdfkit/pdfkit.py
这是一个回溯:
Aug 25 04:42:46 homeit-generator-faktur-beta gunicorn[29032]: - - [25/Aug/2017:04:42:46 +0000] "GET / HTTP/1.0" 302 - "-" "Mozilla/5.0"
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: Internal Server Error: /render/doklad/
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: Traceback (most recent call last):
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/cor
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: response = get_response(request)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/cor
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: response = self.process_exception_by_middleware(e, request)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/cor
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: response = wrapped_callback(request, *callback_args, **callback_kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/vie
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return self.dispatch(request, *args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/vie
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return handler(request, *args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/dashboard/views.py", line 186, in get
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return super(DokladToPdf, self).get(*args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django_pd
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: content = self.render_pdf(*args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django_pd
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: pdf = pdfkit.from_string(html, False, options, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/pdfkit/ap
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return r.to_pdf(output_path)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/pdfkit/pd
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: raise IOError("wkhtmltopdf exited with non-zero code {0}. error:\n{1}".format(
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: IOError: wkhtmltopdf exited with non-zero code -6. error:
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: QXcbConnection: Could not connect to display
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: - - [25/Aug/2017:06:05:55 +0000] "GET /render/doklad/?id=1 HTTP/1.0" 500 108058 "
你 运行 是你通过 xvfb-run
指挥的吗?
在您的调用代码中,您可能需要将对 wkhtmltopdf
的直接调用替换为更像这样的内容:
xvfb-run -a -s "-screen 0 1024x768x16" /path/to/bin/wkhtmltopdf
我正在开发一个 Django 项目,我们从 HTML 模板生成 PDF 文件。我使用 django-pdfkit
来呈现 PDF。
在我的 Ubuntu 16.04
上一切正常,但是当我在 DigitalOcean Ubuntu 16.04 服务器上部署项目时,它会引发错误:
IOError at /render/doklad/ wkhtmltopdf exited with non-zero code -6. error:
QXcbConnection: Could not connect to display
我尝试安装
sudo apt-get install libxrender1 fontconfig xvfb
将 WKHTMLTOPDF_BIN
变量设置为正确的路径。
已将 gunicorn
用户更改为 root。
pip install wkhtmltopdf
没有任何帮助,你知道我能做些什么来解决这个问题吗?
编辑:
我发现如果我以 root 身份执行此命令,它会正常工作:
wkhtmltopdf http://www.google.com google.pdf
但问题是如果我 运行 使用 django
用户的命令。它returns同样的东西:
QXcbConnection: Could not connect to display
Aborted (core dumped)
所以我尝试更改 gunicorn.service
,使 gunicorn 运行ning 在 root
而不是 django
下,但它没有帮助。
http://mypage/render/doklad/?id=1
returns同样的错误。
此文件中似乎出现了错误:
https://github.com/JazzCore/python-pdfkit/blob/master/pdfkit/pdfkit.py
这是一个回溯:
Aug 25 04:42:46 homeit-generator-faktur-beta gunicorn[29032]: - - [25/Aug/2017:04:42:46 +0000] "GET / HTTP/1.0" 302 - "-" "Mozilla/5.0"
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: Internal Server Error: /render/doklad/
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: Traceback (most recent call last):
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/cor
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: response = get_response(request)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/cor
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: response = self.process_exception_by_middleware(e, request)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/cor
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: response = wrapped_callback(request, *callback_args, **callback_kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/vie
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return self.dispatch(request, *args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django/vie
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return handler(request, *args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/dashboard/views.py", line 186, in get
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return super(DokladToPdf, self).get(*args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django_pd
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: content = self.render_pdf(*args, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/django_pd
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: pdf = pdfkit.from_string(html, False, options, **kwargs)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/pdfkit/ap
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: return r.to_pdf(output_path)
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: File "/home/django/homeit/homeitvenv/local/lib/python2.7/site-packages/pdfkit/pd
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: raise IOError("wkhtmltopdf exited with non-zero code {0}. error:\n{1}".format(
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: IOError: wkhtmltopdf exited with non-zero code -6. error:
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: QXcbConnection: Could not connect to display
Aug 25 06:05:55 homeit-generator-faktur-beta gunicorn[29032]: - - [25/Aug/2017:06:05:55 +0000] "GET /render/doklad/?id=1 HTTP/1.0" 500 108058 "
你 运行 是你通过 xvfb-run
指挥的吗?
在您的调用代码中,您可能需要将对 wkhtmltopdf
的直接调用替换为更像这样的内容:
xvfb-run -a -s "-screen 0 1024x768x16" /path/to/bin/wkhtmltopdf