2017-08-24 1 views
0

Je travaille sur un projet Django où nous générons des fichiers PDF à partir d'un modèle HTML. J'utilise django-pdfkit pour rendre le PDF.Wkhtmltopdf (pdfkit) - QXcbConnection: Impossible de se connecter pour afficher

Sur mon Ubuntu 16.04 tout fonctionne correctement, mais quand je Déployez le projet sur Digital Ocean serveur Ubuntu 16.04, il génère l'erreur:

IOError at /render/doklad/ wkhtmltopdf exited with non-zero code -6. error:

QXcbConnection: Could not connect to display

J'ai essayé d'installer

sudo apt-get install libxrender1 fontconfig xvfb

Set variables WKHTMLTOPDF_BIN à chemin correct.

Changé gunicorn utilisateur à la racine.

pip install wkhtmltopdf 

Rien n'a aidé, savez-vous ce que je peux faire pour résoudre ce problème?

EDIT:

J'ai découvert que si je fais cette commande comme une racine, il fonctionne correctement:

wkhtmltopdf http://www.google.com google.pdf 

Mais le problème est que si je lance la commande en utilisant django utilisateur . Il retourne la même chose:

QXcbConnection: Could not connect to display 
Aborted (core dumped) 

J'ai donc essayé de changer gunicorn.service si gunicorn est en cours d'exécution sous root au lieu de django, mais il n'a pas aidé.

http://mypage/render/doklad/?id=1 

renvoie la même erreur.

L'erreur semble être soulevée dans ce dossier:

https://github.com/JazzCore/python-pdfkit/blob/master/pdfkit/pdfkit.py

Et ceci est un retraçage:

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 " 
+0

Notez que dans l'océan numérique que vous n'avez pas accès à un écran si vous vous connectez via SSH, vous devez utiliser l'option -X, c'est-à-dire: 'ssh -X user @ ip-address' – eyllanesc

Répondre

0

Êtes-vous en cours d'exécution de votre commmand par xvfb-run?

Dans votre code d'appel que vous devrez peut-être remplacer les appels droite jusqu'à wkhtmltopdf avec quelque chose comme ceci:

xvfb-run -a -s "-screen 0 1024x768x16" /path/to/bin/wkhtmltopdf 
+0

Je pense que ce n'est pas un problème car si je l'essaye dans bash, cela fonctionne. Mais seulement après la racine. Si je lance wkhtmltopdf sous django, il renvoie la même erreur que celle que je vois dans le navigateur lorsque j'essaie de rendre le pdf. J'ai ajouté plus de détails au bas de ma question. –