Repository: zestedesavoir/zds-site

Issue:
Impossible de télécharger un tuto en PDF
Si j'essaie de télécharger un tuto (ici celui sur les représentations intervallaires) en PDF, j'obtiens cette erreur :

> IOError at /tutoriels/telecharger/pdf/
> [Errno 2] No such file or directory: u'/opt/zdsenv/ZesteDeSavoir/tutoriels-public/70_la-representation-intervallaire/la-representation-intervallaire.pdf'

Traceback :

```
Environment:


Request Method: GET
Request URL: http://zdsappserver/tutoriels/telecharger/pdf/?tutoriel=70

Django Version: 1.6.5
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sitemaps',
 'django.contrib.humanize',
 'south',
 'crispy_forms',
 'crispy_forms_foundation',
 'email_obfuscator',
 'pipeline',
 'haystack',
 'munin',
 'zds.utils',
 'zds.pages',
 'zds.gallery',
 'zds.mp',
 'zds.newsletter',
 'zds.article',
 'zds.forum',
 'zds.tutorial',
 'zds.member',
 'django.contrib.admin')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'zds.utils.ThreadLocals',
 'zds.middlewares.SetLastVisitMiddleware.SetLastVisitMiddleware')


Traceback:
File "/opt/zdsenv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  112.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/zdsenv/ZesteDeSavoir/zds/member/decorator.py" in _can_read_now
  21.         return func(request, *args, **kwargs)
File "/opt/zdsenv/ZesteDeSavoir/zds/tutorial/views.py" in download_pdf
  2569.             "rb").read(),

Exception Type: IOError at /tutoriels/telecharger/pdf/
Exception Value: [Errno 2] No such file or directory: u'/opt/zdsenv/ZesteDeSavoir/tutoriels-public/70_la-representation-intervallaire/la-representation-intervallaire.pdf'
```



Discussion:
Oui en fait le truc est que la generation par pandoc plante, avant, et donc on ne sait pas pourquoi.

Ce qu'il faut faire en fait c'est loggué les erreurs de pandoc et permettre a l'admin de les consulter

Est-ce que ce tuto a été importé depuis un fichier datant d'avant ma dernière passe sur les tutos (il y a environ 10 jours), ou d'après ?

Si c'est avant, alors c'est peut-être juste un dollar non échappé qui traîne dans le tuto est qui fait planter la conversion PDF, ce bug avait été relevé par firm1 il y a un moment et c'est pour ça que j'avais dû re-parser les cours.

Si c'est après, alors c'est autre chose et si jamais ça concerne encore un élément de syntaxe dans les tutos convertis, prévenez-moi.

Ce tuto n'est pas issu de l'importation (je l'ai créé from scratch), donc je doute que ce soit la cause du bug...

il y a quoi dans ton tuto ? tu aurais un liens ?

Christophe.

On Thu, Jun 5, 2014 at 10:46 AM, Baptiste Clavié notifications@github.com
wrote:

> J'ai aussi cette erreur, mais sans avoir importé de tuto (donc en créant
> un tuto from scratch)
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195253
> .

C'est celui sur la représentation intervallaire, cité par Spacefox : http://zestedesavoir.com/tutoriels/70/la-representation-intervallaire/

Pour le md, ou plutôt ce qui y correspond à peu près : https://github.com/Taluu/tutorial-sql-interval

Sans le log pandoc, ça va etre compliqué

Christophe.

On Thu, Jun 5, 2014 at 10:53 AM, Baptiste Clavié notifications@github.com
wrote:

> C'est celui sur la représentation intervallaire, cité par Spacefox :
> http://zestedesavoir.com/tutoriels/70/la-representation-intervallaire/
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195775
> .

Je te comprend, mais j'y ai pas accès, pour ça faut pinger ceux qui ont accès aux logs...

Je ne connais pas assez pandoc, mais si quelqu'un me dit comment/ou trouver
les logs, je met ca en place.

On Thu, Jun 5, 2014 at 9:55 AM, Baptiste Clavié notifications@github.com
wrote:

> Je te comprend, mais j'y ai pas accès, pour ça faut pinger ceux qui ont
> accès aux logs...
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195972
> .

En fait le prob est qu'ils ne sont pas logué actuellement. C'est la
premiere étape necessaire pour résoudre ce bug

Christophe.

On Thu, Jun 5, 2014 at 10:55 AM, Baptiste Clavié notifications@github.com
wrote:

> Je te comprend, mais j'y ai pas accès, pour ça faut pinger ceux qui ont
> accès aux logs...
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195972
> .

Ca se fait a quel niveau? Pandoc meme, ou au niveau du code qui genere ca?

2014-06-05 10:04 GMT+01:00 Christophe Gabard notifications@github.com:

> En fait le prob est qu'ils ne sont pas logué actuellement. C'est la
> premiere étape necessaire pour résoudre ce bug
> 
> Christophe.
> 
> On Thu, Jun 5, 2014 at 10:55 AM, Baptiste Clavié notifications@github.com
> 
> wrote:
> 
> > Je te comprend, mais j'y ai pas accès, pour ça faut pinger ceux qui ont
> > accès aux logs...
> > 
> > —
> > Reply to this email directly or view it on GitHub
> > <
> > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195972>
> > 
> > .
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45196726
> .

Au niveau du code qui lance pandoc je pense, mais firm1 pourrait confirmer

Christophe.

2014-06-05 11:07 GMT+02:00 geoffreyc notifications@github.com:

> Ca se fait a quel niveau? Pandoc meme, ou au niveau du code qui genere ca?
> 
> 2014-06-05 10:04 GMT+01:00 Christophe Gabard notifications@github.com:
> 
> > En fait le prob est qu'ils ne sont pas logué actuellement. C'est la
> > premiere étape necessaire pour résoudre ce bug
> > 
> > Christophe.
> > 
> > On Thu, Jun 5, 2014 at 10:55 AM, Baptiste Clavié <
> > notifications@github.com>
> > 
> > wrote:
> > 
> > > Je te comprend, mais j'y ai pas accès, pour ça faut pinger ceux qui
> > > ont
> > > accès aux logs...
> > > 
> > > —
> > > Reply to this email directly or view it on GitHub
> > > <
> > 
> > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195972>
> > 
> > > .
> > 
> > —
> > Reply to this email directly or view it on GitHub
> > <
> > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45196726>
> > 
> > .
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45196947
> .

Ici précisément je pense :
https://github.com/zestedesavoir/zds-site/blob/ff17ad991e411fec13dc516c93f1ac3165c846ac/zds/tutorial/views.py#L2746

Christophe.

2014-06-05 11:26 GMT+02:00 Christophe Gabard christophe.gabard@gmail.com:

> Au niveau du code qui lance pandoc je pense, mais firm1 pourrait confirmer
> 
> Christophe.
> 
> 2014-06-05 11:07 GMT+02:00 geoffreyc notifications@github.com:
> 
> Ca se fait a quel niveau? Pandoc meme, ou au niveau du code qui genere ca?
> 
> > 2014-06-05 10:04 GMT+01:00 Christophe Gabard notifications@github.com:
> > 
> > > En fait le prob est qu'ils ne sont pas logué actuellement. C'est la
> > > premiere étape necessaire pour résoudre ce bug
> > > 
> > > Christophe.
> > > 
> > > On Thu, Jun 5, 2014 at 10:55 AM, Baptiste Clavié <
> > > notifications@github.com>
> > > 
> > > wrote:
> > > 
> > > > Je te comprend, mais j'y ai pas accès, pour ça faut pinger ceux qui
> > > > ont
> > > > accès aux logs...
> > > > 
> > > > —
> > > > Reply to this email directly or view it on GitHub
> > > > <
> > > 
> > > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195972>
> > > 
> > > > .
> > > 
> > > —
> > > Reply to this email directly or view it on GitHub
> > > <
> > > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45196726>
> > > 
> > > .
> > 
> > —
> > Reply to this email directly or view it on GitHub
> > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45196947
> > .

Nice, je m'y penche ce midi pendant ma pose voir si je peux faire ca. Si
firm1 se manifeste et qu'il sait deja quoi faire, je lui laisse la main.

On Thu, Jun 5, 2014 at 10:29 AM, Christophe Gabard <notifications@github.com

> wrote:
> 
> Ici précisément je pense :
> 
> https://github.com/zestedesavoir/zds-site/blob/ff17ad991e411fec13dc516c93f1ac3165c846ac/zds/tutorial/views.py#L2746
> 
> Christophe.
> 
> 2014-06-05 11:26 GMT+02:00 Christophe Gabard christophe.gabard@gmail.com:
> 
> > Au niveau du code qui lance pandoc je pense, mais firm1 pourrait
> > confirmer
> > 
> > Christophe.
> > 
> > 2014-06-05 11:07 GMT+02:00 geoffreyc notifications@github.com:
> > 
> > Ca se fait a quel niveau? Pandoc meme, ou au niveau du code qui genere
> > ca?
> > 
> > > 2014-06-05 10:04 GMT+01:00 Christophe Gabard notifications@github.com:
> > > 
> > > > En fait le prob est qu'ils ne sont pas logué actuellement. C'est la
> > > > premiere étape necessaire pour résoudre ce bug
> > > > 
> > > > Christophe.
> > > > 
> > > > On Thu, Jun 5, 2014 at 10:55 AM, Baptiste Clavié <
> > > > notifications@github.com>
> > > > 
> > > > wrote:
> > > > 
> > > > > Je te comprend, mais j'y ai pas accès, pour ça faut pinger ceux qui
> > > > > ont
> > > > > accès aux logs...
> > > > > 
> > > > > —
> > > > > Reply to this email directly or view it on GitHub
> > > > > <
> > > 
> > > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45195972>
> > > 
> > > > > .
> > > > 
> > > > —
> > > > Reply to this email directly or view it on GitHub
> > > > <
> > > 
> > > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45196726>
> > > 
> > > > .
> > > 
> > > —
> > > Reply to this email directly or view it on GitHub
> > > <
> > > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45196947>
> > > 
> > > .
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45198890
> .

Je crois pas que os.system permet de récupérer le contenu de std in. Ou alors faut voir si il y a une option de pandoc pour ecrire les logs dans un fichier

Sinon de facon plus simple, si je rajoute  "2>&1 | tee -a pandoc.log" (pipe
sterr et stout vers un fichier log) ?

2014-06-05 10:44 GMT+01:00 Christophe Gabard notifications@github.com:

> Je crois pas que os.system permet de récupérer le contenu de std in. Ou
> alors faut voir si il y a une option de pandoc pour ecrire les logs dans un
> fichier
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45200150
> .

Oui mais chaque generation va ecraser le precedent log. Ça peut suffir pour
debuguer rapidement pour la sortie et nous laisser le temps de revoir une
version plus propre en effet.

Christophe.

2014-06-05 11:50 GMT+02:00 geoffreyc notifications@github.com:

> Sinon de facon plus simple, si je rajoute "2>&1 | tee -a pandoc.log" (pipe
> sterr et stout vers un fichier log) ?
> 
> 2014-06-05 10:44 GMT+01:00 Christophe Gabard notifications@github.com:
> 
> > Je crois pas que os.system permet de récupérer le contenu de std in. Ou
> > alors faut voir si il y a une option de pandoc pour ecrire les logs dans
> > un
> > fichier
> > 
> > —
> > Reply to this email directly or view it on GitHub
> > <
> > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45200150>
> > 
> > .
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45200744
> .

Non justement le -a fait en sorte que ça "append" a la suite si le fichier
existe :)

2014-06-05 11:04 GMT+01:00 Christophe Gabard notifications@github.com:

> Oui mais chaque generation va ecraser le precedent log. Ça peut suffir
> pour
> debuguer rapidement pour la sortie et nous laisser le temps de revoir une
> version plus propre en effet.
> 
> Christophe.
> 
> 2014-06-05 11:50 GMT+02:00 geoffreyc notifications@github.com:
> 
> > Sinon de facon plus simple, si je rajoute "2>&1 | tee -a pandoc.log"
> > (pipe
> > sterr et stout vers un fichier log) ?
> > 
> > 2014-06-05 10:44 GMT+01:00 Christophe Gabard notifications@github.com:
> > 
> > > Je crois pas que os.system permet de récupérer le contenu de std in.
> > > Ou
> > > alors faut voir si il y a une option de pandoc pour ecrire les logs
> > > dans
> > > un
> > > fichier
> > > 
> > > —
> > > Reply to this email directly or view it on GitHub
> > > <
> > 
> > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45200150>
> > 
> > > .
> > 
> > —
> > Reply to this email directly or view it on GitHub
> > <
> > https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45200744>
> > 
> > .
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/719#issuecomment-45201856
> .


Resolving patch:
diff --git a/zds/settings.py b/zds/settings.py
--- a/zds/settings.py
+++ b/zds/settings.py
@@ -339,6 +339,9 @@
 # WITHOUT THE APPROVAL OF THE ASSOCIATION COMMITEE
 MAIL_NOREPLY = 'noreply@zestedesavoir.com'
 
+# LOG PATH FOR PANDOC LOGGING
+PANDOC_LOG = './pandoc.log'
+
 # Load the production settings, overwrite the existing ones if needed
 try:
     from settings_prod import *
diff --git a/zds/tutorial/views.py b/zds/tutorial/views.py
--- a/zds/tutorial/views.py
+++ b/zds/tutorial/views.py
@@ -2747,7 +2747,7 @@ def MEP(tutorial, sha):
               + "pandoc --latex-engine=xelatex -s -S --toc "
               + os.path.join(tutorial.get_prod_path(), tutorial.slug)
               + ".md -o " + os.path.join(tutorial.get_prod_path(),
-                                         tutorial.slug) + ".html")
+                                         tutorial.slug) + ".html 2>&1 | tee -a "+settings.PANDOC_LOG)
     os.system(settings.PANDOC_LOC + "pandoc " + "--latex-engine=xelatex "
               + "--template=../../assets/tex/template.tex " + "-s " + "-S "
               + "-N " + "--toc " + "-V documentclass=scrbook "
@@ -2756,11 +2756,11 @@ def MEP(tutorial, sha):
               + "-V geometry:margin=1in "
               + os.path.join(tutorial.get_prod_path(), tutorial.slug) + ".md "
               + "-o " + os.path.join(tutorial.get_prod_path(), tutorial.slug)
-              + ".pdf")
+              + ".pdf 2>&1 | tee -a "+settings.PANDOC_LOG)
     os.system(settings.PANDOC_LOC + "pandoc -s -S --toc "
               + os.path.join(tutorial.get_prod_path(), tutorial.slug)
               + ".md -o " + os.path.join(tutorial.get_prod_path(),
-                                         tutorial.slug) + ".epub")
+                                         tutorial.slug) + ".epub 2>&1 | tee -a "+settings.PANDOC_LOG)
     os.chdir(settings.SITE_ROOT)
     return (output, err)
 


Test patch: